[プログラマー]双優先級キュー(Python Python Python Python Python Python Python Python Python)


👉 にじゅうゆうせんれつ



マイコード

from collections import defaultdict
import heapq as hq


def solution(operations):
    max_h = []
    min_h = []
    dic = defaultdict(int)
    for i in operations:
        com, num = i.split(" ")
        if com == "I":
            hq.heappush(min_h, int(num))
            hq.heappush(max_h, -int(num))
            dic[int(num)] += 1

        else:
            while num == "-1" and min_h:
                n = hq.heappop(min_h)
                if dic[n] != 0:
                    dic[n] -= 1
                    break

            while num == "1" and max_h:
                n = hq.heappop(max_h)
                if dic[-n] != 0:
                    dic[-n] -= 1
                    break
    max = min = 0
    while min_h:
        n = hq.heappop(min_h)
        if dic[n] != 0:
            dic[n] -= 1
            min = n
            break

    while max_h:
        n = hq.heappop(max_h)
        if dic[-n] != 0:
            dic[-n] -= 1
            max = -n
            break

    return [max, min]

チップ


問題を解いた後、いつも人の解答を見て、最も良い解答を得るのはとても簡潔で、だから手でいくつかのケースを試して、間違いのコードであることを発見しました.
この問題はテスト例が不足して合格したが,上記のコードのようにさらなる同期作業が必要である.
  • defaultdictでポップアップされた数値をチェックして、同期操作を行う必要があります(私のコードではwhile文).