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

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) // 2for 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]=vcs = list(accumulate(s))return [bisect.bisect_right(s, q) for q in queries]

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

http://www.lryc.cn/news/455155.html

相关文章:

  • 用 Delphi 做了一个简单的 CMS
  • ASK, PSK, FSK, DPSK
  • 【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示
  • [Offsec Lab] ICMP Monitorr-RCE+hping3权限提升
  • Studying-多线程学习Part4 - 异步并发——async future、packaged_task、promise
  • 【Java基础】用Scanner类获取控制台输入
  • 微服务seata解析部署使用全流程
  • Linux性能调优技巧
  • python 实现sha1算法
  • ejb-ref元素
  • Perl 子程序(函数)
  • ElasticSearch 备考 -- Snapshot Restore
  • 【Linux】进程替换、命令行参数及环境变量(超详解)
  • MySQL事务日志—redo日志介绍
  • 告别音乐小白!字节跳动AI音乐创作工具,让你一键变作曲家!
  • 空心正方形图案
  • 【EXCEL数据处理】000020 案例 保姆级教程,附多个操作案例。EXCEL使用表格。
  • 虾皮Shopee大数据面试题及参考答案
  • 重学SpringBoot3-集成Redis(六)之消息队列
  • LeetCode 134 Gas Station 解题思路和python代码
  • 服务攻防
  • leetcode 力扣算法题 快慢指针 双指针 19.删除链表的倒数第n个结点
  • 网络五层模型:物理层、数据链路层、网络层、传输层、应用层,分别解决了什么问题?
  • OpenCV视频I/O(18)视频写入类VideoWriter之初始化 VideoWriter 对象的函数open()的使用
  • 大数据处理从零开始————4.认识HDFS分布式文件系统
  • jwt认证课件讲解
  • 【判断推理】逻辑基础
  • AcWing 655:天数转换 ← 整除、求余
  • 【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:
  • 算法笔记(十三)——BFS 解决最短路问题