LeetCode – Maximum Size Subarray Sum Equals k (Java)

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:
Given nums = [1, -1, 5, -2, 3], k = 3,
return 4. (because the subarray [1, -1, 5, -2] sums to 3 and is the longest)

Java Solution

This problem is similar to Maximum Sum of SubArray Close to K.

public int maxSubArrayLen(int[] nums, int k) {
    HashMap<Integer, Integer> map = new HashMap<>();
    map.put(0, -1);
    int result = 0;
    int sum = 0;
 
    for(int i=0; i<nums.length; i++){
        sum += nums[i];
        if(map.containsKey(sum - k)){
            result = Math.max(result, i - map.get(sum - k));
        }
        map.putIfAbsent(sum, i);
    }
 
    return result;
}

4 thoughts on “LeetCode – Maximum Size Subarray Sum Equals k (Java)”

  1. This doesn’t work for {1,2,-3,3,-1,2,4} with K = 3. It should return 4 {1, 2, -3, 3} but your code will return 5.

  2. Should not
    nums = [1, -1, 5, -2, 3], k = 3
    and
    nums = [1, 3, 5, -2, -1], k = 3
    return the same?

Leave a Comment