【LeetCode】最短子陣列之和(Minimum size subarray sum)
阿新 • • 發佈:2019-01-27
Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn't one, return 0 instead.
For example, given the array[2,3,1,2,4,3]
and s = 7
,
the subarray [4,3]
has the minimal length under the problem constraint.
【題目】
給定一個數組包含n個正整數,再給定一個整數s,找出最短長度的連續子陣列,使該子陣列的和sum滿足sum≥s,如果不存在滿足條件的情況則返回0。
例如:[2, 3, 1, 2, 4, 3] 7
輸出:2
該輸出對應的子陣列為[4, 3]。
【思路】
兩個指標,start和end。end向後走直到sum大於s。然後start向後,直到sum小於s。同時更新min值。
【Code】
public class MinimumSizeSubarraySum { public int minSubArrayLen(int s, int[] nums) { //兩個陣列索引 int start = 0; int end = 0; int sum = 0;//計運算元陣列和 int min = Integer.MAX_VALUE;//儲存最小子陣列長度 while(start < nums.length && end < nums.length) { while(sum < s && end < nums.length) { sum += nums[end++];//相加直到和大於等於s } while(sum >= s && start <= end) { min = Math.min(min, end-start);//記錄最短長度 sum -= nums[start++];//sum減去子陣列頭,start前移 } } return min == Integer.MAX_VALUE ? 0 : min; } }