My solution:
1. Super violence. . . No way the first reaction is always violent, but it timed out
Commemorate, or send it up
class Solution {
public:
int func(vector<int> v,int i,int k){
int res,max=0x80000000;
for(int j=0;j<k;j++){
if(v[i+j]>=max){
res=i+j;
max=v[i+j];
}
}
return max;
}
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
if(!nums.size()) return {};
if(k==1) return nums;
vector<int> res;
for(int i=0;i<nums.size()-k+1;i++){
int tmp=func(nums,i,k);
res.push_back(tmp);
}
return res;
}
};
2. Use deque two-way queue, deque front () represents the maximum number of the sliding window
If it is not in the window range, pop him out_front ()
New elements are compared with queue elements
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
int n=nums.size();
if(n<=1||k==1) return nums;
vector<int> res;
deque<int> dq;
for(int i=0;i<k-1;i++){
while(!dq.empty() && nums[i]>nums[dq.back()])
dq.pop_back();
dq.push_back(i);
}
for(int i=k-1;i<n;i++){
if(!dq.empty()&&dq.front()<i-k+1) dq.pop_front();
while(!dq.empty()&&nums[dq.back()]<nums[i]) dq.pop_back();
dq.push_back(i);
res.push_back(nums[dq.front()]);
}
return res;
}
};
Thanks to this question let me understand the usage of deque
front/back/pop_back/pop_front/push_back/push_front