时间已经是排好序的,不用再处理。
先预处理t时刻时,得票最多的人的名单。
然后针对第t次查询,由于t可能不存在,因此需要找到<=t的最近的存在的时刻,这里可以使用一个二分。
class TopVotedCandidate {
private:
vector<int> tops;
vector<int> times;
public:
TopVotedCandidate(vector<int>& persons, vector<int>& times) {
this->times = times;
unordered_map<int, int> voteCounts;
int idx = -1;
int maxVoteCnt = 0;
for (auto p : persons) {
voteCounts[p]++;
if (voteCounts[p] >= maxVoteCnt) {
maxVoteCnt = voteCounts[p];
idx = p;
}
tops.emplace_back(idx);
}
}
int q(int t) {
int pos = upper_bound(times.begin(), times.end(), t) - times.begin() - 1;
return tops[pos];
}
};
/**
* Your TopVotedCandidate object will be instantiated and called as such:
* TopVotedCandidate* obj = new TopVotedCandidate(persons, times);
* int param_1 = obj->q(t);
*/