题目地址(930. 和相同的二元子数组)
https://leetcode.cn/problems/binary-subarrays-with-sum/
题目描述
给你一个二元数组 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
前置知识
公司
- 暂无
思路
关键点
代码
- 语言支持:Python3
Python3 Code:
class Solution:
def numSubarraysWithSum(self, A: List[int], S: int) -> int:
def atMostK(A, S):
if S < 0:
return 0
i = res = 0
for j in range(len(A)):
S -= A[j]
while S < 0:
S += A[i]
i += 1
res += j - i + 1
return res
return atMostK(A, S) - atMostK(A, S - 1)
复杂度分析
令 n 为数组长度。
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)