Skip to content

Maximum Size Subarray Sum Equals k⚓︎

Link

Description⚓︎

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

A subarray is a contiguous sequence of elements within an array.

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 * 10^5
  • -10^4 <= nums[i] <= 10^4
  • -10^9 <= k <= 10^9

Solution⚓︎

class Solution {
public:
    int maxSubArrayLen(vector<int>& nums, int k) {
        unordered_map<long long, int> prefixMap;
        prefixMap[0] = -1;

        int res = 0;
        long long sum = 0;
        for (int i = 0; i < nums.size(); i++) {
            sum += nums[i];

            if (prefixMap.find(sum - k) != prefixMap.end()) {
                res = max(res, i - prefixMap[sum - k]);
            }
            if (prefixMap.find(sum) == prefixMap.end()) {
                prefixMap[sum] = i;
            }
        }

        return res;
    }
};