911.在线选举

原题 思路:算出每个时刻的胜者,q函数直接读取结果即可

class TopVotedCandidate:

    def __init__(self, persons: List[int], times: List[int]):
        end = times[-1] #最终时刻
        self.wins = [-1] * (end+1)  #每个时刻的胜者
        maxVote = 0 #当前最高票数
        votes = [0] * len(persons)  #记录每个人的票数
        lastTime = times[0] #上个投票时刻
        # 遍历每个投票时刻
        for i in range(len(times)):  
            time = times[i] #时刻
            person = persons[i] #候选人
            votes[person] += 1
             # (lastTime : time) 这段闭区间的胜者与lastTime时相同
            for i in range(lastTime+1, time):
                self.wins[i] = self.wins[lastTime]
            #当前最高,或者平局,此时产生新胜者
            if votes[person] >= maxVote: 
                maxVote = votes[person]
                self.wins[time] = person
            else:
                self.wins[time] = self.wins[lastTime]
            lastTime = time

    def q(self, t: int) -> int:
        # 注意用例会有超过times[-1]的情况
        return self.wins[t] if t < len(self.wins) else self.wins[-1]

最后更新于