前缀和题目

1 前缀和题目常见于连续问题中,一定要注意初始条件的添加,否则会出错,

class Solution:
    def subarraySum(self, nums: List[int], k: int) -> int:
        from collections import defaultdict
        l = len(nums)
        memo = defaultdict(int)
        # 必须加初始条件,因为如果s-k为0的时候,说明s为k,这也算一个
        memo[0] = 1
        s = 0
        res = 0
        for i in range(l):
            s += nums[i]
            if s-k in memo:
                res += memo[s-k]
            # 必须是先计算完k的个数,再统计前缀和s,因为当前的前缀和是不计算在里面的,
            memo[s] += 1
        return res
View Code

注意这道题如果数组中全为正数,则要用指针解,即209. 长度最小的子数组

560. 和为K的子数组

2 统计第i个奇数的前缀和,

1248. 统计「优美子数组」

3 这个题先用哈希表记录其中两组,再记录另外两组,时间复杂度是n方,如果是6组数时间复杂度是n的三次,对于求和问题,往往要用哈希表来记录,因为要考虑所有的情况,

454. 四数相加 II

posted on 2020-04-22 14:26  吃我一枪  阅读(164)  评论(0编辑  收藏  举报

导航