Sword Finger Offer Entrevista Pregunta 59-I. Valor máximo de la ventana deslizante [simple] -deque

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

65 artículos originales publicados · Me gusta1 · Visitas 479

Supongo que te gusta

Origin blog.csdn.net/qq_41041762/article/details/105557014
Recomendado
Clasificación