難度中等
給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組,並返回其長度。如果不存在符合條件的連續子數組,返回 0。
示例:
輸入:s = 7, nums = [2,3,1,2,4,3]
輸出: 2 解釋: 子數組[4,3]
是該條件下的長度最小的連續子數組。
進階:
如果你已經完成了O(n) 時間複雜度的解法, 請嘗試 O(n log n) 時間複雜度的解法
思路:用個隊列,隊列和大了,就poll直到小,隊列和小了,就offer直到大,只要大,就統計長度,求min;進階解法後續更新
class Solution {
public int minSubArrayLen(int s, int[] nums) {
Queue<Integer> q=new LinkedList<Integer>();
int minl=100000000;
int ac=0;
for(int i=0;i<nums.length;i++){
q.offer(nums[i]);
ac+=nums[i];
while(ac>=s&&q.size()>0){
minl=Math.min(minl,q.size());
ac-=q.poll();
}
}
if(minl==100000000){
return 0;
}
else {
return minl;
}
}
}