私の解決策:
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.両端キューを使用します。両端フロント()は、スライディングウィンドウの最大数を表します。
ウィンドウ範囲にない場合は、out_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の使用法を理解させてください
フロント/バック/ポップバック/ポップフロント/プッシュバック/プッシュフロント