LeetCode 209 長度最小的子數組Java

209. 長度最小的子數組

難度中等

給定一個含有 個正整數的數組和一個正整數 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;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章