325. Maximum Size Subarray Sum Equals k (maximum length of a subarray that sums to k.)
class Solution { public int maxSubArrayLen(int[] nums, int k) { // sanity check if ( nums == null || nums.length == 0){ return 0; } int[] prefix = new int[nums.length]; prefix[0] = nums[0]; for(int i = 1; i < nums.length; i++){ prefix[i] = prefix[i-1] + nums[i]; } int max = 0; HashMap<Integer, Integer> map = new HashMap<>(); map.put(0, -1); for(int i = 0; i< nums.length; i++){ if(!map.containsKey(prefix[i])){ map.put(prefix[i], i); } if(map.containsKey(prefix[i] - k)){ max = Math.max(max, i - map.get(prefix[i] - k)); } } return max; } }
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:
Input: nums =[1, -1, 5, -2, 3], k =3Output: 4 Explanation: The subarray[1, -1, 5, -2]sums to 3 and is the longest.
Example 2:
Input: nums =[-2, -1, 2, 1], k =1Output: 2 Explanation: The subarray[-1, 2]sums to 1 and is the longest.
Follow Up:
Can you do it in O(n) time?
posted on 2018-07-18 09:02 猪猪🐷 阅读(113) 评论(0) 收藏 举报
浙公网安备 33010602011771号