题解 | #滑动窗口的最大值#
滑动窗口的最大值
http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
用堆的方法,和暴力的方法都可以。
关键对的解法看注释。
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; }
};
```
算法解析 文章被收录于专栏
这里主要是算法岗的自我思路总结