标签:render map put output sub ash actual new +=
Given an array of integers and an integer k, you need to find the minimum size of continuous subarrays whose sum equals to k, and return its length.
if there are no such subarray, return -1.
Example1
Input: nums = [1,1,1,2] and k = 3
Output: 2
Example2
Input: nums = [2,1,-1,4,2,-3] and k = 3
Output: 2
the integer nums[i] may lower than 0
Solution 1: O(N^2) TLE
public class Solution { /** * @param nums: a list of integer * @param k: an integer * @return: return an integer, denote the minimum length of continuous subarrays whose sum equals to k */ public int subarraySumEqualsKII(int[] nums, int k) { // write your code here int[] prefix = new int[nums.length]; for (int i = 0; i < nums.length; i++) { if (i == 0) { prefix[i] = nums[i]; continue; } prefix[i] = prefix[i - 1] + nums[i]; } System.out.println(Arrays.toString(prefix)); int res = Integer.MAX_VALUE; for (int i = 0; i < nums.length; i++) { for (int j = i; j < nums.length; j++) { if (i == 0) { if (prefix[j] == k) { res = Math.min(res, j + 1); } continue; } if (prefix[j] - prefix[i - 1] == k) { res = Math.min(res, j - i + 1); } } } return res == Integer.MAX_VALUE ? -1 : res; } }
Solution 2:
public class Solution { /** * @param nums: a list of integer * @param k: an integer * @return: return an integer, denote the minimum length of continuous subarrays whose sum equals to k */ public int subarraySumEqualsKII(int[] nums, int k) { // write your code here Map<Integer, Integer> map = new HashMap<>(); int sum = 0; int res = Integer.MAX_VALUE; map.put(0, -1); for (int i = 0; i < nums.length; i++) { sum += nums[i]; if (map.containsKey(sum - k)) { // actually get the i - 1 index for map.get(sum - k) res = Math.min(res, i - map.get(sum - k)); } map.put(sum, i); } return res == Integer.MAX_VALUE ? -1 : res; } }
[LintCode] 1844. subarray sum equals k II
标签:render map put output sub ash actual new +=
原文地址:https://www.cnblogs.com/xuanlu/p/12515155.html