
class Solution(object):
def numSubarraysWithSum(self, nums, goal):
"""
:type nums: List[int]
:type goal: int
:rtype: int
"""
# 1.前缀和
presum = 0
adict = {0:1}
count = 0
for i in range(len(nums)):
presum += nums[i]
if presum - goal in adict:
count += adict[presum-goal]
if presum not in adict:
adict[presum] = 1
else:
adict[presum] += 1
return count
class Solution(object):
def numSubarraysWithSum(self, nums, goal):
"""
:type nums: List[int]
:type goal: int
:rtype: int
"""
# 数组中只有0和1,和就是1的个数
def leGoal(nums, goal):
if goal < 0:
return 0
start = 0
one_count = 0
count = 0
for end in range(len(nums)):
if nums[end] == 1:
one_count += 1
while one_count > goal:
if nums[start] == 1:
one_count -= 1
start += 1
count += end-start+1
return count
return leGoal(nums, goal)-leGoal(nums, goal-1)