题解 | #滑动窗口的最大值#

滑动窗口的最大值

http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

滑动窗口最大值

【思路】:利用双端队列通过(下标)维护来单调队列(单调递减),则每次的头即是滑动窗口最大值。

  • 判断要进队列的数num[i]和队列的尾,如果队列的尾小于num[i]直接出队列 (因为如果当前进队的比之前进队的大之前进队的都可以不用)

  • 如果队列头+size <= i 表示超过滑动窗口大小,队头出列

class Solution {
public:
    vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
        vector<int> v;
        deque<int> q;
        if(size == 0)return {};
        for(int i = 0;i < num.size();++i){
           while(!q.empty() && num[q.back()] <= num[i])
               q.pop_back();
            q.push_back(i);
            if(q.front() + size <= i)
                q.pop_front();
            if(i + 1 >= size)
                v.push_back(num[q.front()]);
        }
        return v;
    }
};
全部评论

相关推荐

点赞 评论 收藏
分享
后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务