假设我们有一个叫做nums的数组,有一个大小为k的滑动窗口,它从数组的左边移到右边。我们只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。我们必须找到最大滑动窗口。因此,如果输入像-[1,3,-1,-3,5,3,6,8]并且k为3,则窗口将像-窗口位置最高13-1-353683
13-1-353683
13-1-353683
13-1-353685
13-1-353686
13-1-353688
为了解决这个问题,我们将遵循以下步骤-定义一个数组ans
定义一个双头队列dq
如果nums的大小等于0,则返回ans
用于初始化i:= 0,当i
当dq不为空且nums [dq的最后一个元素]
在dq的末尾插入i
用于初始化i:= k,当i
从dq中删除前元素
插入(nums [dq的前元素])到ans
当dq不为空且dq的前元素
当dq不为空并且nums [dq的最后一个元素]
在dq的末尾插入i
在末尾将nums [dq的前元素]插入ans
返回ans
示例
让我们看下面的实现以更好地理解-#include
using namespace std;
void print_vector(vector v){
cout <
for(int i = 0; i
cout <
}
cout <
}
void print_vector(vector > v){
cout <
for(int i = 0; i
cout <
for(int j = 0; j
cout <
}
cout <
}
cout <
}
class Solution {
public:
vector maxSlidingWindow(vector& nums, int k) {
vector ans;
deque dq;
if(nums.size()==0)return ans;
for(int i =0;i
while(!dq.empty() && nums[dq.back()]
dq.push_back(i);
}
for(int i = k;i
ans.push_back(nums[dq.front()]);
while(!dq.empty() && dq.front()
while(!dq.empty() && nums[dq.back()]
dq.push_back(i);
}
ans.push_back(nums[dq.front()]);
return ans;
}
};
main(){
Solution ob;
vector v = {1,3,-1,-3,5,3,6,8};
print_vector(ob.maxSlidingWindow(v,3));
}
输入值{1,3,-1,-3,5,3,6,8}
输出结果[3, 3, 5, 5, 6, 8, ]