검은 제안 인터뷰 질문 59-2를 말합니다 : 대기열의 최대 가치

이 질문에 대한 아이디어는 이전 질문과 유사합니다.

1 푸시 할 때 값이 최대 값보다 크고 최대 값 대기열이 지워진 다음이 값이 최대 대기열의 끝에 추가되고 값이 최대 값보다 작습니다. 이 값보다 작은 값을 가진 데이터는 삭제되고이 값은 최대 대기열의 끝에 추가됩니다.

2 팝시 최대 값과 같고 최대 값 대기열의 최대 값이 삭제됩니다.

이 아이디어는 주로 대기열의 특성, 대기열과 창 간의 차이점을 나타냅니다.

창의 팝과 푸시는 동시에 발생하고, 매번 두 가지 작업이 발생하므로 창의 길이는 변경되지 않고 큐의 팝과 푸시는 별도로 발생합니다.

 

암호:

구현에는 익숙하지 않은 Queue 및 Deque 작업이 포함됩니다. 대답의 코드는 매우 간결합니다.

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);

 

내 코드

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;
    }
}

답변 코드

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

추천

출처blog.csdn.net/qq_40473204/article/details/115345817