"""length=len(nums)res=[]q=deque()foridx,vinenumerate(nums):#检查如果左边界超出窗口就弹出队列头iflen(q)>0andq[0]<=idx-k:t=q.popleft()#循环检查队尾是否大于当前元素whilelen(q)>0andnums[q[-1]]<v:q.pop()q.append(idx)if(idx>=k-1):res.append(nums[q[0]])returnres...
maxlist.append(nums[deq[0]])#单调队列第一个元素即为当前窗口最大值的索引#窗口开始滑动,注意此时需要删除上一窗口最左边的元素了foriinrange(k, len(nums)):#注意deq[0]肯定是deq中关于nums列表索引最小的,我们只需要判断其是否是上一窗口最左元素(若不是说明上一窗口最左元素已经被删除)ifdeqanddeq[0...
解释: 滑动窗口的位置 最大值 [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3 5 3] 6 7 5 1 3 -1 -3 [5 3 6] 7 6 1 3 -1 -3 5 [3 6 7] 7 单调队列解法 classSolution{ public: vector<int>maxSlidingWindow(vector<...
滑动窗口的位置 最大值 [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3 5 3] 6 7 5 1 3 -1 -3 [5 3 6] 7 6 1 3 -1 -3 5 [3 6 7] 7 单调队列解法 class Solution {public: vectormaxSlidingWindow(vector& nums, int...
AcWing 289. 环路运输,《算法竞赛进阶指南》,单调队列优化dp,滑动窗口求最大值,环形结构dp 289. 环路运输 - AcWing题库 在一条环形公路旁均匀地分布着 N 座仓库,编号为 1∼N,编号为 i 的仓库与编号为 j 的仓库之间的距离定义为 dist(i,j)=min(|i−j|,N−|i−j|),也就是逆时针或顺时针从 ...