哈希表+二分查找
from collections import defaultdict
class TopVotedCandidate:
def __init__(self, persons: List[int], times: List[int]):
tops = []
voteCounts = defaultdict()
voteCounts[-1] = -1
top = -1
# 计算不同的人的票数,并缺即时统计领先者
for p in persons:
voteCounts[p] = voteCounts.get(p,0) + 1
if voteCounts[top] <= voteCounts[p]:
top = p
tops.append(top)
# tops中存放的就是每一时刻优胜者的序列
self.tops = tops
self.times = times
def q(self, t: int) -> int:
# 利用二分查找找到t时间对应的投票时间点
l, r = 0, len(self.times) - 1
while l < r:
m = l + (r - l + 1) // 2
if self.times[m] <= t:
l = m
else:
r = m - 1
return self.tops[l]
# Your TopVotedCandidate object will be instantiated and called as such:
# obj = TopVotedCandidate(persons, times)
# param_1 = obj.q(t)