LC 1244 [M] Design A Leaderboard - ALawliet/algorithms GitHub Wiki

from queue import PriorityQueue

class Leaderboard(object):

    def __init__(self):
        
        self.d = defaultdict(int)
        

    def addScore(self, playerId, score):
        """
        :type playerId: int
        :type score: int
        :rtype: None
        """
        self.d[playerId] += score
        

    def top(self, K):
        """
        :type K: int
        :rtype: int
        """
        minH = PriorityQueue(K + 1)
        for score in self.d.values():
            minH.put(score)
            if minH.full(): # minH.qsize() > K
                minH.get()
        return sum(minH.queue)
        

    def reset(self, playerId):
        """
        :type playerId: int
        :rtype: None
        """
        del self.d[playerId]