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

滑动窗口的最大值

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;
    }
};
全部评论

相关推荐

我:“加班需要有加班工资。”&nbsp;hr:“为什么?”&nbsp;哈哈哈哈哈哈哈离大谱
juntenor:你确实太理想化了,对社会不了解呀。这个和HR没有关系,这是国内特色,不然怎么还会有外包就这种逆天的存在呢。
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
06-04 09:27
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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