我的解题:
1,超暴力。。。没办法第一反应永远是暴力的,但是超时了
纪念一下,还是发上来吧
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.使用deque双向队列,deque的front()代表该滑动窗口最大值的序号
如果不在窗口范围就把他pop_front()掉
新元素与队列元素进行比较
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;
}
};
感谢这道题让菜鸡的我了解了deque的用法
front/back/pop_back/pop_front/push_back/push_front