Maximum Size Subarray Sum Equals k
Given an arraynumsand a target valuek, find the maximum length of a subarray that sums tok. If there isn't one, return 0 instead.
Note: The sum of the entirenumsarray is guaranteed to fit within the 32-bit signed integer range.
Example 1:
Input:
nums
=
[1, -1, 5, -2, 3]
,
k
=
3
Output:
4
Explanation:
The subarray
[1, -1, 5, -2]
sums to 3 and is the longest.
Example 2:
Input:
nums
=
[-2, -1, 2, 1]
,
k
=
1
Output:
2
Explanation:
The subarray
[-1, 2]
sums to 1 and is the longest.
Follow Up: Can you do it in O(n) time?
分析
不用subsum数组,直接cursum+map,一遍loop,第一次遇到sum加入,后来的就算subsum == k。
注意这里subsum不含头,所以res=j-i就行,不用+1
class Solution:
def maxSubArrayLen(self, nums: List[int], k: int) -> int:
sm = 0
mm = {}
res = 0
for i,v in enumerate(nums):
sm += v
if sm == k:
res = i+1
elif sm - k in mm:
res = max(res,i - mm[sm - k]) #subsum不包含起始的Index,所以这里不用加1
if sm not in mm: mm[sm] = i
return res
Last updated
Was this helpful?