930. 和相同的二元子数组
Difficulty
Medium
Tags
前缀和
URL
https://leetcode.cn/problems/binary-subarrays-with-sum/
Star
给你一个二元数组
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 * 10
4
nums[i]
不是0
就是1
0 <= goal <= nums.length
通过次数38,271提交次数69,931
前缀和
思路
前缀和模板题
题解
class Solution: def numSubarraysWithSum(self, nums: List[int], goal: int) -> int: h = defaultdict(int) h[0] = 1 sum_ = 0 res = 0 for i in range(0, len(nums)): sum_ += nums[i] if sum_ - goal in h: res += h[sum_-goal] h[sum_] += 1 return res