【leetcode前500】446. 等差数列划分 II - 子序列

该博客探讨了一种优化算法,用于计算给定整数数组中等差序列的数量。通过使用字典存储已遍历序列的公差计数,避免了二维数组的空间消耗,提高了效率。代码示例展示了如何遍历数组并动态更新字典来计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们观察下面的数据长度,那么平方级别时间应该是足够了。

这里示例给了一个很好的例子,可以看出是可以重复的。我们选定一个以x结尾的序列,遍历它前面的数字y,设公差为d,那么以y结尾的所有序列且公差为d的序列个数加1就是以x结尾的公差为d的个数。

需要注意的是,这里公差可能的范围非常大,将二维数组的第二维度换成字典保存公差d,这样就得到下列代码,需要注意的是,最终结果是返回所有可以成为等差序列的序列个数。

class Solution:
    def numberOfArithmeticSlices(self, nums: List[int]) -> int:
        ans = 0
        f = [{} for _ in range(len(nums))]
        for i in range(len(nums)):
            for j in range(i):
                d = nums[i] - nums[j]
                cnt = f[j].get(d,0)
                ans += cnt
                f[i][d]=f[i].get(d,0)+cnt+1
        return ans

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值