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; } |

2,-3,3,-1,2 is the longest.

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.

No usually we say subarray it has to be contiguous

Should not

nums = [1, -1, 5, -2, 3], k = 3

and

nums = [1, 3, 5, -2, -1], k = 3

return the same?