給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組,並返回其長度。如果不存在符合條件的連續子數組,返回 0。
示例:
輸入:s = 7, nums = [2,3,1,2,4,3]
輸出:2
解釋:子數組 [4,3] 是該條件下的長度最小的連續子數組。
進階:
如果你已經完成了 O(n) 時間複雜度的解法, 請嘗試 O(n log n) 時間複雜度的解法。
解題思路一
第一種方法,比較常規,符合我們的腦回路。
遍歷數組,求遍歷過的和sum。
當sum >= s時,依次減去sum前面的數字,並判斷是否依舊符合sum >= s。
直到sum >= s不成立,記錄start–到end的長度。
繼續遍歷數組的下一位,循環2-3步驟,比較之後取最小長度。
代碼實現一
/**
* @param {number} s
* @param {number[]} nums
* @return {number}
*/varminSubArrayLen=function(s, nums){let sum =0;let start =0;let end =0;let min = nums.length +1;for(let i =0; i < nums.length; i++){
sum += nums[i];if(sum >= s){
end = i;while(sum >= s){
sum -= nums[start++];}
start--;
sum += nums[start];if(min >(end - start)){
min = end - start +1;}}}if(min > nums.length){return0;}return min;};