# LeetCode 325. Maximum Size Subarray Sum Equals k

## Description

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

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

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

Constraints:

• `1 <= nums.length <= 2 * 105`
• `-104 <= nums[i] <= 104`
• `-109 <= k <= 109`

## Explanation

Record the sum at each index location i. If sum – k has been found before at index j, that means the sum of nums[j: i] is equal to k (because the sum of nums[:i] is the sum and the sum of nums[:j] equals sum – k). Every time we see a previous sum – k found for location i, we can check if the difference between the current position and the sum – k position is the longest.

## Python Solution

``````class Solution:
def maxSubArrayLen(self, nums: List[int], k: int) -> int:
sum_map = {}

sum_map = -1

prefix_sum = 0

result = 0

for i, num in enumerate(nums):
prefix_sum += num

if prefix_sum - k in sum_map:
result = max(result, i - sum_map[prefix_sum - k])

if prefix_sum not in sum_map:
sum_map[prefix_sum] = i

return result``````
• Time Complexity: O(N).
• Space Complexity: O(N).