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

滑动窗口的最大值

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

  1. 用堆的方法,和暴力的方法都可以。

  2. 关键对的解法看注释。

    class Solution {
    public:
     vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
         vector<int> res;
         if(num.size()<size){
             return res;
         }
    
         priority_queue<pair<int,int>> que;// 将元素和对应下标(会自动按照pair的第一个元素)
         int index = 0;//可以看作是窗口第一个元素的index(滑动窗口的左端点)
         for(int i =0; i< num.size(); i++){
             que.push({num[i],i});// 将元素和对应下标入堆
    
             if(i>=size-1){//之后满堆的时候,以此来维持一个类似的滑动窗口的概念
                 while(que.size()&&que.top().second<index){ // 若此时堆顶元素不在窗口内
                     que.pop();    // 弹出堆顶
                 }
    
                 res.push_back(que.top().first);
                 index++;
             }
    
    
    }


    return res;
}

};
```

算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

点赞 评论 收藏
分享
10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务