給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組。如果不存在符合條件的連續子數組,返回 0。
示例:
輸入:s = 7, nums = [2,3,1,2,4,3]
輸出: 2 解釋: 子數組[4,3]
是該條件下的長度最小的連續子數組。
思路:這個題可以採用滑動窗口的方法來解決。
1.首先定義一個最左邊的起始位置left作爲標誌,然後遍歷數組。
2.如果和大於s,則用min記錄個數,並將left向後滑動。
3.最後如果有符合條件的min,則返回min,否則返回0.
public static int minSubArrayLen(int s,int[] nums){
int left=0;
int sum=0;
int min=Integer.MAX_VALUE;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
while(sum>=s){
min=Math.min(min, i-left+1);
sum-=nums[left];
left++;
}
}
return min==Integer.MAX_VALUE?0:min;
}
有不懂的地方請在下邊留言