题意:有一个数组nums,给一个长度k,查看数组nums中,长度为k的连续子序列的最大值,存到resultVec中,并返回。
题解:这个使用双端队列deque,实现单调队列
针对每一个数,向左找单调递增队列,把下表小于等于i-k的数删掉。然后(i-k,k]区间的最大数就是nums[dequeIndex.front()];
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> dequeIndex;
vector<int> resultVec;
for (int i=0;i<nums.size();i++) {
while(!dequeIndex.empty() && nums[i]>=nums[dequeIndex.back()]) dequeIndex.pop_back();
while(!dequeIndex.empty() && dequeIndex.front()<=i-k) dequeIndex.pop_front();
dequeIndex.push_back(i);
if(i>=k-1) {
resultVec.push_back(nums[dequeIndex.front()]);
}
}
return resultVec;
}
};