当前位置: 首页 > article >正文

Leetcode 3312. Sorted GCD Pair Queries

  • Leetcode 3312. Sorted GCD Pair Queries
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3312. Sorted GCD Pair Queries

1. 解题思路

这一题的话坦率来说没有搞定,后来是找的大佬的代码抄了一下……

整体来说这道题思路上还是比较暴力的,还是一个二重循环,不过我是最暴力的二重循环,大佬稍微做了一下优化……

首先给出我的代码如下:

class Solution:
    def gcdValues(self, nums: List[int], queries: List[int]) -> List[int]:
        cnt = Counter(nums)
        nums = sorted(cnt.keys())
        m = max(nums)
        s = [0 for _ in range(m+1)]

        n = len(nums)
        for i in range(n):
            x = nums[i]
            s[x] += cnt[x] * (cnt[x]-1) // 2
            for j in range(i+1, n):
                y = nums[j]
                c = gcd(x, y)
                s[c] += cnt[x] * cnt[y]

        s = list(accumulate(s))
        return [bisect.bisect_right(s, q) for q in queries]

可以看到,就是两两求最大公约数,然后通过二分检索的方式求query的结果。而这个方法不出所料地超时了。

然后大佬们的优化点在于不是两两求最大公约数了,而是直接将所有可能的因数罗列出来,然后求每一个数作为最大公约数时的个数。

而对于具体的求法类似于求全部质数,即对每一个数,其作为最大公约数的个数为所有倍数上的数的个数总和取 C n 2 C_n^2 Cn2,然后减去其倍数上所有的数的最大公约数的数目。

如此一来的话差不多就是将时间复杂度从 O ( N 2 ) O(N^2) O(N2)减至 O ( N 3 / 2 ) O(N^{3/2}) O(N3/2)

2. 代码实现

给出python代码实现如下:

class Solution:
    def gcdValues(self, nums: List[int], queries: List[int]) -> List[int]:
        cnt = Counter(nums)
        nums = sorted(cnt.keys())
        m = max(nums)
        s = [0 for _ in range(m+1)]
        
        for i in range(m,0,-1):
            vc = sum(cnt[x] for x in range(i,m+1,i))
            vc = vc*(vc-1)//2 - sum(s[x] for x in range(i,m+1,i))
            s[i]=vc
        s = list(accumulate(s))
        
        return [bisect.bisect_right(s, q) for q in queries]

提交代码评测得到:耗时1627ms,占用内存42.2MB。


http://www.kler.cn/news/341791.html

相关文章:

  • 移动电源自动化测试中有哪些关键步骤,如何对这些步骤进行优化-天宇微纳
  • 大数据新视界 --大数据大厂之大数据如何重塑金融风险管理:精准预测与防控
  • finereport制作带刷新和滚动的明细表
  • Windows10如何关闭自动更新
  • 深度学习:循环神经网络——LSTM
  • 用Python制作数据可视化仪表盘:使用Dash与Plotly构建实时交互式仪表盘
  • 质量好的宠物空气净化器分享,希喂、小米、范罗士性能大揭秘
  • 单片机原理及应用详解
  • UI设计岗前训练
  • 想做产品经理,大学期间该做什么准备?
  • 2024年最佳平替电容笔对比:西圣、摩米士、倍思,哪款更适合你?
  • 浙江嘉兴晋亿实业5MW分布式储能项目中的应用
  • openmmlab实现图像超分辨率重构
  • 基于ADS的混频器设计
  • 创意多元化是提升Facebook广告销量的关键
  • c# init
  • 网络安全-Morpheus
  • 基于Python的抑郁症患者看护系统
  • YOLOv10改进策略【注意力机制篇】| 引入Shuffle Attention注意力模块,增强特征图的语义表示
  • 水下声呐数据集,带标注