前缀和题目
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
注意这道题如果数组中全为正数,则要用指针解,即209. 长度最小的子数组
2 统计第i个奇数的前缀和,
3 这个题先用哈希表记录其中两组,再记录另外两组,时间复杂度是n方,如果是6组数时间复杂度是n的三次,对于求和问题,往往要用哈希表来记录,因为要考虑所有的情况,