题目描述:
题解:前缀和
由于题目说明中输入nums数组中可能存在负数,因此滑动窗口的方法不适用。
1.创建一个pre_sum数组,pre_sum[0]=0,记录nums数组的前缀和。
2.创建一个dict sum_dict,记录前缀和为某个值的子数组数量,初始化返回值ret=0。
3.每次计算出一个前缀和pre_sums[-1],将其值减k,如果pre_sums[-1]-k在sum_dict存在,则返回值ret加上sum_dict对应的value值。
4.如果pre_sum[-1]在sum_dict中,则其对应value加一,否则设置其对应value为1.
class Solution: def subarraySum(self, nums: List[int], k: int) -> int: ret = 0 sum_dict = {0: 1} pre_sum = [] pre_sum.append(0) for i in range(len(nums)): pre_sum.append(pre_sum[-1]+nums[i]) if (pre_sum[-1]-k) in sum_dict: ret = ret+sum_dict[pre_sum[-1]-k] if pre_sum[-1] in sum_dict: sum_dict[pre_sum[-1]] = sum_dict[pre_sum[-1]]+1 else: sum_dict[pre_sum[-1]] = 1 return ret