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

滑动窗口的最大值

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

相关推荐

美丽的查理斯不讲武德:包kpi的啊,感觉虾皮一点hc都没有
点赞 评论 收藏
分享
我即大橘:耐泡王
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务