Maximum Size Subarray Sum Equals k LT325

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)

Example 2:

Given nums = [-2, -1, 2, 1], k = 1,
return 2. (because the subarray [-1, 2] sums to 1 and is the longest)

Follow Up:
Can you do it in O(n) time?

Idea 1. HashMap to store (prefixSum, the first index prefixSum ends) + prefix subarray sum.

Time complexity: O(n)

Space complexity: O(n)

 1 public class Solution {
 2     public int maxSubArrayLen(int[] nums, int k) {
 3         int maxLen = 0;
 4         Map<Integer, Integer> sumIndex = new HashMap<>();
 5         sumIndex.put(0, -1);
 6 
 7         int sum = 0;
 8         for(int i = 0; i < nums.length; ++i) {
 9             sum += nums[i];
10             Integer left = sumIndex.get(sum - k);
11             if(left != null) {
12                 maxLen = Math.max(maxLen, i - left);
13             }
14             sumIndex.putIfAbsent(sum, i);
15         }
16         return maxLen;
17     }
18 }

猜你喜欢

转载自www.cnblogs.com/taste-it-own-it-love-it/p/10425222.html
今日推荐