Sword se refiere a la pregunta de la entrevista de oferta 59-2: el valor máximo de la cola

La idea de esta pregunta es similar a la anterior, mi idea:

1 Al presionar, el valor es mayor que el valor máximo, la cola de valor máximo se borra y luego este valor se agrega al final de la cola máxima, y ​​el valor es menor que el valor máximo, comenzando desde el final de la cola, los datos cuyo valor es menor que este valor se eliminan, y luego este valor se agrega al final de la cola máxima.

2 Cuando aparece, el valor es igual al valor máximo y se elimina el valor máximo en la cola de valores máximos.

La idea se refiere principalmente a las características de la cola, la diferencia entre la cola y la ventana:

El pop y el push de la ventana ocurren al mismo tiempo, y dos operaciones ocurren cada vez, de modo que la longitud de la ventana permanece sin cambios; el pop y el push de la cola ocurren por separado.

 

Código:

La implementación implica la operación de Queue y Deque, que no es familiar. El código de la respuesta es muy conciso.

Deque<Integer> deque = new LinkedList();
Queue<Integer> queue = new LinkedList();
deque.size()
res = deque.peekLast();
deque.removeLast();
deque.addLast(value);
deque.peekFirst()
deque.removeFirst();
deque.addFirst(value);

 

Mi código

class MaxQueue {
    Deque<Integer> deque = new LinkedList();
    Queue<Integer> queue = new LinkedList();
    public MaxQueue() {

    }
    
    public int max_value() {
        int res = -1;
        if(deque.size() > 0){
            res = deque.peekLast();
        }
        return res;
    }
    
    public void push_back(int value) {
        if(queue.size() >0){
            queue.add(value);
            if(value > deque.peekLast()){
                while(deque.size()!=0){
                    deque.removeLast();
                }
                deque.addLast(value);
            }else{
                while(deque.size()!=0){
                    if(value > deque.peekFirst()){
                        deque.removeFirst();
                    }else{
                        break;
                    }
                }
                deque.addFirst(value);
            }
            
        }else{
            queue.add(value);
            deque.addLast(value);
        }
    }
    
    public int pop_front() {
        int quepop = -1;
        if(queue.size() >0){
            quepop = queue.remove();
            if(quepop == deque.peekLast()){
                while(deque.size()!=0){
                    if(deque.peekLast()==quepop){
                        deque.removeLast();
                    }else{
                        break;
                    }
                }
            }else{
                
            }
            
        }else{
            return -1;
        }
        return quepop;
    }
}

Código de respuesta

class MaxQueue {
    Queue<Integer> q;
    Deque<Integer> d;

    public MaxQueue() {
        q = new LinkedList<Integer>();
        d = new LinkedList<Integer>();
    }
    
    public int max_value() {
        if (d.isEmpty()) {
            return -1;
        }
        return d.peekFirst();
    }
    
    public void push_back(int value) {
        while (!d.isEmpty() && d.peekLast() < value) {
            d.pollLast();
        }
        d.offerLast(value);
        q.offer(value);
    }
    
    public int pop_front() {
        if (q.isEmpty()) {
            return -1;
        }
        int ans = q.poll();
        if (ans == d.peekFirst()) {
            d.pollFirst();
        }
        return ans;
    }
}

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/solution/mian-shi-ti-59-ii-dui-lie-de-zui-da-zhi-by-leetcod/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

Supongo que te gusta

Origin blog.csdn.net/qq_40473204/article/details/115345817
Recomendado
Clasificación