Leetcode 239. Sliding Window Maximum

題目鏈接:239. Sliding Window Maximum

題目大意:給定一個無序數組和一個k值,要求找出從前往後所有長度爲k的滑動窗口中的最大值

題目思路:用一個雙端隊列維護一個最大值序列,序列中保存序號,每次遇到新的值,我們可以將這個新值與序列中所有值從小到大進行比較,如果該值大於序列中的值,那麼這之間的舊值就沒有用了,因爲新值更大並且序號更高,那麼後面的最大值一定輪不到這個值,而序號比他小但是值比他大的確有可能,因此不能刪,刪的時候注意滑動窗口的範圍就可以了,也就是第一個值的序號需要控制在當前元素的前k個即可,講的不太清楚,可以看代碼,代碼很清晰

時間複雜度&&空間複雜度:O(n)(每個元素只插入一次,也最多刪除一次)&&O(n)

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> res;
        deque<int> deq;
        for(int i = 0;i < nums.size();i++){
            while(!deq.empty()&&i-k == deq.front()) deq.pop_front();
            while(!deq.empty()&&nums[deq.back()] < nums[i]) deq.pop_back();
            deq.push_back(i);
            if(i >= k-1) res.push_back(nums[deq.front()]);
        }
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章