LeetCode 911 在线选举[Map 二分法] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 911 在线选举[Map 二分法] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
既然已经给出了时间段的投票结果,那么我们就可以提前计算好到达某个时间段时,领先的人是谁,用一个哈希表存储编号-票数对,用一个变量top来记录当前最多票数的编号,用tops存储每个时间段领先人编号,这是一个数组,在q函数中直接二分法在tops中寻找即可,这里我想多讲讲这个二分法。因为这里的二分法和平常情况不同,t可能在时间数组中可能在某个时间段之间,所以直接模板不大行,需要略改一下,首先要明确,最后返回的是t时间之前所在的时间段的领先人,所以应该是right-1向下走,最后返回的是right,初始化mid的时候由于会出现0,1这样的mid永远是0的情况,这样right就跨不过去了,所以要让mid向上取整,这样mid才能跨过去,代码如下:
class TopVotedCandidate
private:
vector<int> times;
vector<int> tops;
public:
TopVotedCandidate(vector<int>& persons, vector<int>& times)
unordered_map<int, int> mp;
mp[-1] = -1;
int top = -1;
for(auto& person : persons)
mp[person] ++;
if(mp[person] >= mp[top])
top = person;
tops.push_back(top);
this->times = times;
int q(int t)
int left = 0, right = times.size() - 1;
while(left < right)
int mid = (left + right + 1) / 2;
if(times[mid] <= t)
left = mid;
else
right = mid - 1;
return tops[right];
;
/**
* Your TopVotedCandidate object will be instantiated and called as such:
* TopVotedCandidate* obj = new TopVotedCandidate(persons, times);
* int param_1 = obj->q(t);
*/
以上是关于LeetCode 911 在线选举[Map 二分法] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 911. Online Election 在线选举
LeetCode 748. 最短补全词 / 911. 在线选举 / 709. 转换成小写字母
解题报告Leecode911. 在线选举——Leecode每日一题系列