思路:之前acw应该是做过
acw里这题是单调队列的例题。
。。。。。无语了。太久没看,记成是单调栈的问题了,卡了半天。。。
单调队列。(hh是队头,可以出队(队头元素不在滑动窗口内就出队),tt是队尾,可以加入元素(每个元素必然从队尾进来一次)也可以删除元素(新元素更优,且队列不空,此时队尾的元素就被优化掉了)。)
代码:
class Solution {
const int N = 1e5+10;
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
int q[N];//队列里面存的是每个位置的下标,方便判断队头元素是否还在当前窗口中。。。。。单调队列在这题由于要输出每个窗口中的最大值,所以应该是单调递减。
int hh=0,tt=-1;
vector<int> ans;
for(int i=0;i<nums.size();i++)
{
if(i-k>=q[hh]) hh++;
while(hh<=tt&&nums[q[tt]]<=nums[i])
{
tt--;
}
q[++tt]=i;
if(i>=k-1) ans.push_back(nums[q[hh]]);
}
return ans;
}
};
ps:ai应该是寄了。。好好思考思考方向好好沉淀吧,唉
多套老师 感觉可以冲冲直博。
408每本书+线代概统至少过两遍 求你了 。。
项目再做一个出来。做的出彩一点!!!求你了wjx
你到底是想要title还是啥 还是进高校当老师? 直博感觉是预推免可以好好考虑的
zjucs的直博好好看看老师 试试吧
njucs的老师 njuai的直博 预推免不知道还能不能报