📅  最后修改于: 2023-12-03 14:54:20.724000             🧑  作者: Mango
给定一个整数数组,求出总和等于其长度的子数组的计数。
输入:nums = [1,2,3,2,1]
输出:3
解释:总共有三个子数组满足条件:[1,2], [2,3], [3,2,1]
此问题可以用哈希表来解决。
map
,用来记录每个元素的前缀和及其出现的次数;sum
;sum
和之前出现过的某个前缀和的差等于当前部分数组的长度,则表示找到了一个符合条件的子数组;同时,利用哈希表 map
特性,统计所有符合条件的子数组的数量。class Solution:
def subarraySum(self, nums: List[int]) -> int:
count, sum = 0, 0
map = {0: 1}
for num in nums:
sum += num
if sum - len(nums) in map:
count += map[sum - len(nums)]
if sum in map:
map[sum] += 1
else:
map[sum] = 1
return count
代码实现中,我们使用了 Python 中的字典来作为哈希表,方便存储前缀和及其出现的次数。时间复杂度为 $O(n)$。