プログラマ


Link


https://programmers.co.kr/learn/courses/30/lessons/42628

Code

import java.util.*;

class Solution {
    public int[] solution(String[] operations) {
        PriorityQueue<Integer> minq = new PriorityQueue<>();
        PriorityQueue<Integer> maxq = new PriorityQueue<>(Collections.reverseOrder());
        for (String oper : operations) {
            StringTokenizer st = new StringTokenizer(oper);
            String op = st.nextToken();
            int value = Integer.parseInt(st.nextToken());
            if (op.equals("I")) {
                minq.offer(value);
                maxq.offer(value);
            }
            else if (!maxq.isEmpty()) {
                if (value == 1) {
                    int max = maxq.poll();
                    minq.remove(max);
                }
                else {
                    int min = minq.poll();
                    maxq.remove(min);
                }
            }
        }
        if (maxq.isEmpty()) {
            int[] answer = {0, 0};
            return answer;
        }
        else {
            int[] answer = {maxq.peek(), minq.peek()};
            return answer;
        }
        
    }
}

Solution


二重優先度を達成するために、minqおよびmaxqが使用される.コマンドがDの場合、キューが空であるかどうかを確認してから、各キューに適した値を減算し、removeメソッドで残りのキューを削除します.answerが出力された場合、キューが空の場合、[0, 0]が出力され、そうでない場合、maxqおよびminqのルート値が出力される.