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[0] = -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).