题解说用双端队列解,效率的确要高一点,有时间试试。
这里用标记数组实现的,先扫描一遍数组内记录比当前值大的下一个值的下标一边搜索
class Solution { public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { if(nums.size()==0) return nums; vector<int>result; if(k==0) return result; map<int,int>donser; for(int i=0;i<nums.size();i++) { int num=nums[i],lable=0; for(int j=i;j<nums.size();j++) { if(num<nums[j]) { donser[i]=j; lable=1; break; } if(lable==0) donser[i]=-1; } } /*map<int,int>::iterator it; for(it=donser.begin();it!=donser.end();it++) cout<<"("<<it->first<<","<<it->second<<") "; cout<<endl;*/ for(int i=0;result.size()<(nums.size()-k+1);i++) { //cout<<endl<<""<<i<<"->"<<donser[i]<<" "; if(donser[i]==-1) { result.push_back(nums[i]); continue; } int x=donser[i],last=i; while(x<(i+k)&&x!=-1) { last=x; x=donser[x]; //cout<<last<<"->"<<x<<" "; } result.push_back(nums[last]); } return result; } };
原文:https://www.cnblogs.com/dzzy/p/12313089.html