LintCode-和大於S的最小子陣列
阿新 • • 發佈:2019-01-08
給定一個由 n 個整陣列成的陣列和一個正整數 s ,請找出該陣列中滿足其和 ≥ s 的最小長度子陣列。如果無解,則返回 -1。
您在真實的面試中是否遇到過這個題? Yes 樣例
給定陣列 [2,3,1,2,4,3]
和 s = 7
,
子陣列 [4,3]
是該條件下的最小長度子陣列。
思路:陣列的題一般思路大概是用兩個指標掃描,這裡是用一前一後兩個指標都從左往右移,前面的指標一直移直到和大於s
為止;後面的指標此時一直右移,直到距離最短為止。最後返回最小子陣列的大小,也就是最小子陣列中元素個數。
程式碼如下:
public class Solution { /** * @param nums: an array of integers * @param s: an integer * @return: an integer representing the minimum size of subarray */ public int minimumSize(int[] nums, int s) { if(nums == null || nums.length == 0) return -1; int end =0; int start = 0; int sum = 0; int res = Integer.MAX_VALUE; while(end < nums.length){ sum +=nums[end]; if(sum >= s){ res = Math.min(res,end-start+1); //當掃描到陣列和大於s時,從第一個元素逐次縮小陣列大小, //直到符合條件的最小子陣列 while(sum >= s && start <= end){ res = Math.min(res,end-start+1); sum-=nums[start]; start++; } } end++; //當前子陣列的和還小於s,end往後移 } if(res == Integer.MAX_VALUE ){ //需要考慮溢位問題 return -1; } return res; } }