1.区域和检索
采用前缀和算法.
class NumArray:
def __init__(self, nums: List[int]):
self.arr = [0]
for i in nums:
self.arr.append(self.arr[-1]+i)
def sumRange(self, left: int, right: int) -> int:
return self.arr[right+1]-self.arr[left]
2.所有奇数长度子数组的和
class Solution:
def sumOddLengthSubarrays(self, arr: List[int]) -> int:
i,sum1=1,0
while i<=len(arr):
for j in range(len(arr)-i+1):
sum1+=sum(arr[j:j+i])
i=i+2
return sum1
3. 和相同的二元子数组
不理解
class Solution:
def numSubarraysWithSum(self, nums: List[int], goal: int) -> int:
n = len(nums)
presum = [0] + list(accumulate(nums))
hashmap = defaultdict(int, {0:1})
ans = 0
for i in range(n):
r = presum[i+1]
l = r - goal
ans += hashmap[l]
hashmap[r] += 1
return ans
4.