> For the complete documentation index, see [llms.txt](https://nataliekung.gitbook.io/ladder_code/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nataliekung.gitbook.io/ladder_code/l7shu-zu/maximum-size-subarray-sum-equals-k.md).

# 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
```
