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

Leetcode 3404. Count Special Subsequences

  • Leetcode 3404. Count Special Subsequences
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3404. Count Special Subsequences

1. 解题思路

这道题是事实上这次的周赛最难的一道题目,不过也是有点巧思在内。

最开始我的想法就是按照乘积构成pair,然后考察同一乘积下的所有的pair找出其中满足条件的四元组 ( p , q , r , s ) (p, q, r, s) (p,q,r,s),不过后来发现这种方式就会深陷限制条件的泥潭,无法快速地求得最终的答案。

后来看了一下大佬们的思路,发现他们核心思想也是差不多,就是用一个counter先对pair进行分组,不过他们的核心是变换了一下公式,将 p × r = q × s p \times r = q \times s p×r=q×s变成了 p q = s r \frac{p}{q} = \frac{s}{r} qp=rs,因此,只需要按照 p q \frac{p}{q} qp进行分组,就可以绕开限制条件,构造出一个有序数列,使得我们在考察任意一个 ( r , s ) (r, s) (r,s)二元组时,之前记录下的 ( p , q ) (p, q) (p,q)二元组都必然是满足条件的。

当然,由于python对于除法事实上经常无法做到完全相同,因此这里事实上在记录时并没有使用除数本身,而是使用了两个元素除去最大公约数之后的pair进行记录,即用分数的形式对结果进行记录,确保答案的准确性。

2. 代码实现

给出python代码实现如下:

class Solution:
    def numberOfSubsequences(self, nums: List[int]) -> int:
        n = len(nums)
        cnt = defaultdict(int)
        ans = 0
        for r in range(3, n-2):
            q = r-2
            for p in range(q-1):
                _gcd = gcd(nums[p], nums[q])
                cnt[(nums[p] // _gcd, nums[q] // _gcd)] += 1
                
            for s in range(r+2, n):
                _gcd = gcd(nums[r], nums[s])
                ans += cnt[(nums[s] // _gcd, nums[r] // _gcd)]
        return ans

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


http://www.kler.cn/a/460751.html

相关文章:

  • SOLIDWORKS Composer在产品设计、制造与销售中的应用
  • springboot实战(19)(条件分页查询、PageHelper、MYBATIS动态SQL、mapper映射配置文件、自定义类封装分页查询数据集)
  • 前端路由layout布局处理以及菜单交互(三)
  • 系统设计——大文件传输方案设计
  • C++11右值与列表初始化
  • Android 系统 ActivityManager 系统层深度定制
  • 边缘AI计算怎么回事
  • 【paddle】初次尝试
  • jenkins集成工具(一)部署php项目
  • ROS2软件架构全面解析-学习如何设计通信中间件框架
  • SCAU期末笔记 - 计算机系统基础考纲习题
  • docker和k8s实践
  • SAP PP CSAP_MAT_BOM_MAINTAIN BOM ECN 删除组件
  • docker-compos mysql5.7主从配置
  • Python入门:9.递归函数和高阶函数
  • 2020最新整理版SpringBoot 面试题
  • 【C++】2029:【例4.15】水仙花数
  • Python列表推导常见问题解析:高效编程的陷阱与避坑指南
  • DeepSeek V3“报错家门”:我是ChatGPT
  • 【brew安装失败】DNS 查询 raw.githubusercontent.com 返回的是 0.0.0.0
  • 电子电气架构 --- 汽车电子电器设计概述
  • 用Pyside6 和sqlite3 重写了《电脑装配单》 加入切换主题 样式
  • 构建一个rust生产应用读书笔记7-确认邮件3
  • 【信息系统项目管理师】高分论文:论信息系统项目的沟通管理(不动产登记系统)
  • Python世界:人生苦短,我用Python
  • 一文讲清楚CSS3新特性