Почему я не могу удалить элемент, полученный peek () из PriorityQueue? - PullRequest
0 голосов
/ 10 апреля 2020

Вот мой код.

class MinStack {
    public Deque<Integer> deque = new LinkedList<Integer>();
    public PriorityQueue<Integer> pq = new PriorityQueue<Integer>();

    public MinStack() {
        Deque<Integer> deque = new LinkedList<Integer>();
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    }

    public void push(int x) {
        deque.offer(x);
        pq.offer(x);
    }

    public void pop() {
        pq.remove(deque.peek()); 
        deque.pollLast();        
    }

    public int top() {
        return deque.peekLast();
    }

    public int getMin() {
        return pq.peek();
    }
}

В функции pop () PriorityQueue не удаляет верхнее значение, которое я получаю из deque.peek (). Когда я изменил его на

pq.remove(deque.pollLast());   

Это сработало. Почему это так?

1 Ответ

2 голосов
/ 10 апреля 2020

Deque.peek() возвращает первый элемент deque, такой же как peekFirst(). Вместо этого используйте peekLast(), как в top().

...