力扣每日一题 6/20 数学+数组

2024-07-16 1328阅读
  • 博客主页:誓则盟约
  • 系列专栏:IT竞赛 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍ 

    力扣每日一题 6/20 数学+数组

    力扣每日一题 6/20 数学+数组

    力扣每日一题 6/20 数学+数组

    2748.美丽下标对的数目【简单】

    题目:

    给你一个下标从 0 开始的整数数组 nums 。如果下标对 i、j 满足 0 ≤ i

    返回 nums 中 美丽下标对 的总数目。

    对于两个整数 x 和 y ,如果不存在大于 1 的整数可以整除它们,则认为 x 和 y 互质 。换而言之,如果 gcd(x, y) == 1 ,则认为 x 和 y 互质,其中 gcd(x, y) 是 x 和 y 的 最大公因数 。

    示例 1:

    输入:nums = [2,5,1,4]
    输出:5
    解释:nums 中共有 5 组美丽下标对:
    i = 0 和 j = 1 :nums[0] 的第一个数字是 2 ,nums[1] 的最后一个数字是 5 。2 和 5 互质,因此 gcd(2,5) == 1 。
    i = 0 和 j = 2 :nums[0] 的第一个数字是 2 ,nums[2] 的最后一个数字是 1 。2 和 5 互质,因此 gcd(2,1) == 1 。
    i = 1 和 j = 2 :nums[1] 的第一个数字是 5 ,nums[2] 的最后一个数字是 1 。2 和 5 互质,因此 gcd(5,1) == 1 。
    i = 1 和 j = 3 :nums[1] 的第一个数字是 5 ,nums[3] 的最后一个数字是 4 。2 和 5 互质,因此 gcd(5,4) == 1 。
    i = 2 和 j = 3 :nums[2] 的第一个数字是 1 ,nums[3] 的最后一个数字是 4 。2 和 5 互质,因此 gcd(1,4) == 1 。
    因此,返回 5 。
    

    示例 2:

    输入:nums = [11,21,12]
    输出:2
    解释:共有 2 组美丽下标对:
    i = 0 和 j = 1 :nums[0] 的第一个数字是 1 ,nums[1] 的最后一个数字是 1 。gcd(1,1) == 1 。
    i = 0 和 j = 2 :nums[0] 的第一个数字是 1 ,nums[2] 的最后一个数字是 2 。gcd(1,2) == 1 。
    因此,返回 2 。

    提示:

    • 2 0: num //= 10 for gcd_num in factor[num]: count += last[gcd_num] return count

      力扣每日一题 6/20 数学+数组

       通过对比两者的提交耗时,可以直观的发现优化后的复杂度有大大降低。


      总结:

      优化后代码详解:
      1. factor 字典:定义了每个数字的因数列表。例如,数字 1 的因数是 1、2、3、4、5、6、7、8、9,数字 2 的因数是 1、3、5、7、9,以此类推。
      2. last 列表:用于记录每个数字在列表中出现的次数。初始时,每个数字的出现次数都为 0。
      3. 遍历列表 nums:对于每个数字 num,将其在 last 列表中的出现次数加 1。
      4. 再次遍历列表 nums:对于每个数字 num,将其在 last 列表中的出现次数减 1。然后,通过不断除以 10,将数字 num 的首位数字提取出来。
      5. 对于提取出来的首位数字,遍历其因数列表 factor[num]。对于每个因数 gcd_num,将其在 last 列表中的出现次数加到 count 变量中。
      6. 最后,返回 count 变量,即美丽数对的数量。
      主要考察了以下几个方面:
      1. 对字典和列表的使用:通过 factor 字典存储数字的因数列表,通过 last 列表记录数字的出现次数。
      2. 循环和条件判断:使用两个嵌套的循环遍历列表 nums,并根据条件进行计算。
      3. 数学运算:涉及到除法和取余运算,用于提取数字的首位数字。
      4. 问题解决能力:通过分析问题,设计合适的数据结构和算法来解决美丽数对的计算问题。
      刷过这道题可以学到以下几点:
      1. 如何使用字典和列表来存储和操作数据。
      2. 如何使用循环和条件判断来解决问题。
      3. 如何进行数学运算和处理数字。
      4. 如何分析问题并设计有效的算法。
      5. 对代码的优化和改进,例如减少重复计算和提高代码的可读性。

      力扣每日一题 6/20 数学+数组

      “别人总是以为你什么都有,但你只剩自己了。”——意难藏—— 

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]