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[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).

Leave a Reply

Your email address will not be published. Required fields are marked *