给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。
子数组 是数组的一段连续部分。
示例 1:
输入:nums = [1,0,1,0,1], goal = 2
输出:4
解释:
有 4 个满足题目要求的子数组:[1,0,1]、[1,0,1,0]、[0,1,0,1]、[1,0,1]
示例 2:
输入:nums = [0,0,0,0,0], goal = 0
输出:15
提示:
1 <= nums.length <= 3 * 104
nums[i] 不是 0 就是 1
0 <= goal <= nums.length
思路: 前缀和sum[i] = sum[j] - goal, 用哈希表的key存放前缀和,value存放相同前缀和的个数。
code:
class Solution:
def numSubarraysWithSum(self, nums: List[int], goal: int) -> int:
presum = dict()
presum[0] = 1
total = 0
count = 0
for i in range(len(nums)):
total += nums[i]
count += presum.get(total - goal, 0)
presum[total] = presum.get(total, 0) + 1
return count
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-subarrays-with-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。