[LintCode] 1844. subarray sum equals k II
Posted xuanlu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LintCode] 1844. subarray sum equals k II相关的知识,希望对你有一定的参考价值。
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.
Example
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
Notice
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的主要内容,如果未能解决你的问题,请参考以下文章
lintcode-medium-Subarray Sum Closest
lintcode-medium-Continuous Subarray Sum
lintcode-medium-Minimum Size Subarray Sum