首页 > 其他分享 >Leetcode 3336. Find the Number of Subsequences With Equal GCD

Leetcode 3336. Find the Number of Subsequences With Equal GCD

时间:2024-10-28 19:45:30浏览次数:7  
标签:gcd2 gcd gcd1 Number Equal num ndp dp GCD

1. 解题思路

这一题没能自力搞定,挺伤心的,看大佬的代码之后发现思路上是一个非常暴力的动态规划,就是不断地考察每一个元素加入到第一个数组、第二个数组以及不做操作时,所有可能的两个数组的最大公约数pair的种类和数目变化。

然后考察最终所有非空且最大公约数相同的pair的个数即可。

2. 代码实现

给出python代码实现如下:

MOD = 10**9+7

class Solution:
    def subsequencePairCount(self, nums: List[int]) -> int:
        dp = defaultdict(int)
        dp[(0, 0)] = 1
        ans = 0
        for num in nums:
            ndp = deepcopy(dp)
            for (gcd1, gcd2), cnt in list(dp.items()):
                _gcd = num if gcd1 == 0 else gcd(num, gcd1)
                ndp[(_gcd, gcd2)] = (cnt + ndp[(_gcd, gcd2)]) % MOD
                
                _gcd = num if gcd2 == 0 else gcd(num, gcd2)
                ndp[(gcd1, _gcd)] = (cnt + ndp[(gcd1, _gcd)]) % MOD
                
            dp = ndp

        for (gcd1, gcd2), cnt in dp.items():
            if gcd1 != 0 and gcd1 == gcd2:
                ans = (ans + cnt) % MOD
        return ans

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

标签:gcd2,gcd,gcd1,Number,Equal,num,ndp,dp,GCD
From: https://blog.csdn.net/codename_cys/article/details/143279656

相关文章

  • orchard core 2 的user模块,添加phonenumber手机号的liquid支持
    老外习惯用email,我们要求的是要手机号。所以除了采用二次验证(2FA),发现工作流要给用户发送通知短信无法获取对应的手机号。所以对源码进行扩展增加了liquid获取手机号。1、下载源码可以clone也可以下载2、找到对应modules的user模块直接在starup.cs找到LiquidStartup添加显......
  • [asm]: linux syscall number(32bits_64bits)
    [asm]:linuxsyscallnumber(32bits_64bits)    一、32bit_syscall_number(451个系统调用)1[root@rocky:tmp]#catlinux_syscall_no_32.txt2//date:2024-10-263//usingFor:4//--AssemblyLanguage(nasm,gas)5//--syscall......
  • 20241023 模拟赛(GCD,包含,前缀,移动)
    看题戳这里总结20min自习。上来30min先把t1写了。然后t2没看明白,先打了个暴力?然后发现值域很离谱,dfs就行了。t3t4看了一眼就跑路了。解析A.GCD难度:黄注意到只有当\(n=\)素数\(p\)的正整数次幂时,有\(f(n)=p\),其他情况都是\(f(n)=1\)。所以用欧拉筛筛一遍......
  • mysql 1206 - The total number of locks exceeds the lock table size
    由于数据量过大导致报错:Thetotalnumberoflocksexceedsthelocktablesize解决方法:输入查询:showvariableslike"%_buffer%";找到对应的 innodb_buffer_pool_size 默认值是8388608  8兆将这个数值设置的大一点,比如1G1G=1024*1024*1024=1073741824 setGLOB......
  • 数据库 NULL 值对比运算符(null safe equal)
    在SQL的规定中,NULL是不等于NULL的,所以如果使用类似SELECTNULL=NULL这种语句,获取到的会是一个FALSE。但是有些时候我们又希望能够匹配到数据库中的NULL,通常写法是SELECTNULLISNULL,但是有没有能够同时兼容NULL和非NULL的情况呢?MySQLMySQL::MySQL5.7......
  • JC4002 Each item indicates the numberof marks
    JointInstituteSCNU-UniversityofAberdeenKnowledgeRepresentation(JC4002)AssessmentTheassessmentisworth25%oftheoverallmarksforthecourse.Eachitemindicatesthenumberofmarksitisworth,clearlybrokendownintheirspecification.Stud......
  • 【重拾算法第一天】质数&&约数&&欧拉筛 埃氏筛&&GCD
    1.素数素数(PrimeNumber)是指大于1的自然数,只有两个正因数:1和它自身。换句话说,素数是不能被其他自然数整除的数。1.1小素数的判定判定一个数是否为素数,当N≤  时,用试除法,当n>  时,用Miller_Rabin算法根据素数的定义,可以直接得到试除法,用[2,n-1]内的所有数着......
  • 包装类型-Number方法
    数字类型Number◼前面我们已经学习了Number类型,它有一个对应的数字包装类型Number,我们来对它的方法做一些补充。◼Number属性补充:Number.MAX_SAFE_INTEGER:JavaScript中最大的安全整数(2^53-1);Number.MIN_SAFE_INTEGER:JavaScript中最小的安全整数-(2^53-1)......
  • 【Springboot】注解EqualsAndHashCode
    先看问题,如图所示注解解释@EqualsAndHashCode作用与子类上callSuper=true,根据子类自身的字段值和从父类继承的字段值来生成hashcode,当两个子类对象比较时,只有子类对象的本身的字段值和继承父类的字段值都相同,equals方法的返回值是true。callSuper=false,根据子类......
  • GCD Counting
    算法\(\mathcal{O}(n\logn)\)算法,\(95pts\)观察题目,发现题目要求我们求\(\gcd\)不等于\(1\)的一条最长链考虑将每个数分解质因数对于每一个\(1\simk\)中的质数,将所有含有这个质因子的数加入一颗虚树,求最长链即可,经过尝试发现\(k=700\)时即可通过可以......