好题,变相的two sum。首先求出前缀和。然后开始遍历,并维护一个last 变量,记录上一次找到subarry的较大的那个index。因为当下一次找到可以满足相减差为targt的一对位置时,其较小的位置应大于等于上次发现解时的较大的index,并更新这个last到当前找到的subarray的较大index。
class Solution:
def maxNonOverlapping(self, nums: List[int], target: int) -> int:
themap = collections.defaultdict(int)
presum = [0 for _ in range(len(nums)+1)]
presum[1] = nums[0]
for i in range(2, len(nums)+1):
presum[i] = presum[i-1] + nums[i-1]
i = 0
res = 0
last = -1
for idx, value in enumerate(presum):
if len(themap) and value - target in themap and themap[value - target] >= last:
res += 1
last = idx
themap[value] = idx
return res