栈与队列 Leetcode 239 滑动窗口最大值
Leetcode 239
要点:1.能想到单调队列,积累技巧;
class Solution{
public:class My_Monotonous_Queue{public:deque<int> Mono_queue;// 重写队列pop函数内部实现,移除队列最前方的值,如果队列最前方的值和要移除的数值相同则执行移除命令void pop(int value){if(!Mono_queue.empty() && Mono_queue.front() == value){Mono_queue.pop_front();}}// 重写队列push函数内部实现,添加元素到队列尾部,如果队列尾部值小于所要添加元素,则移除队列尾部元素直至队列尾部元素大于等于所要添加的元素值,之后添加元素值到队列尾部void push(int value){while(!Mono_queue.empty() && Mono_queue.back() < value){Mono_queue.pop_back();}Mono_queue.push_back(value);}int front(){return Mono_queue.front();}};vector<int> maxSlidingWindow(vector<int>& nums, int k){My_Monotonous_Queue Mono_Q;vector<int> res;for(int i = 0; i < k; i++){Mono_Q.push(nums[i]);}res.push_back(Mono_Q.front());for(int i = k; i < nums.size(); i++){Mono_Q.pop(nums[i-k]);Mono_Q.push(nums[i]);res.push_back(Mono_Q.front());}return res;}
};