Mi solucion:
1. Súper violencia. . . De ninguna manera la primera reacción es siempre violenta, pero se agotó el tiempo
Conmemorar o enviarlo
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. Utilice la cola bidireccional deque, deque front () representa el número máximo de la ventana deslizante
Si no está en el rango de la ventana, pop out outfront ()
Los nuevos elementos se comparan con los elementos de la cola.
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;
}
};
Gracias a esta pregunta, déjame entender el uso de deque
front / back / pop_back / pop_front / push_back / push_front