# 325. Maximum Size Subarray Sum Equals k

**<font color=red>难度: Medium</font>**

## 刷题内容

> 原题连接

* https://leetcode.com/problems/maximum-size-subarray-sum-equals-k/description/

> 内容描述

```
Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If there isn't one, return 0 instead.

Note:
The sum of the entire nums array 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?
```

## 解题方案

> 思路 1
******- 时间复杂度: O(N)******- 空间复杂度: O(N)******


前缀和+字典的方法

```python
class Solution(object):
    def maxSubArrayLen(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        res, sums = 0, 0 # res and the accumulative value of nums
        lookup = {0: -1} # key is accumlative sum, value is index
        for i, num in enumerate(nums):
            sums += num
            if sums - k in lookup:
                res = max(res, i-lookup[sums-k]) # when key = 0, we should just use i+1
            if sums not in lookup:
                lookup[sums] = i 
        return res
```


