文章目录

  • 1. 题目
  • 2. 解题

1. 题目

在选举中,第 i 张票是在时间为 times[i] 时投给 persons[i] 的。

现在,我们想要实现下面的查询函数: TopVotedCandidate.q(int t) 将返回在 t 时刻主导选举的候选人的编号。

在 t 时刻投出的选票也将被计入我们的查询之中。
在平局的情况下,最近获得投票的候选人将会获胜。

示例:
输入:["TopVotedCandidate","q","q","q","q","q","q"],
[[[0,1,1,0,0,1,0],[0,5,10,15,20,25,30]],
[3],[12],[25],[15],[24],[8]]
输出:[null,0,1,1,0,0,1]
解释:
时间为 3,票数分布情况是 [0],编号为 0 的候选人领先。
时间为 12,票数分布情况是 [0,1,1],编号为 1 的候选人领先。
时间为 25,票数分布情况是 [0,1,1,0,0,1],编号为 1 的候选人领先(因为最近的投票结果是平局)。
在时间 15、24 和 8 处继续执行 3 个查询。提示:
1 <= persons.length = times.length <= 5000
0 <= persons[i] <= persons.length
times 是严格递增的数组,所有元素都在 [0, 10^9] 范围中。
每个测试用例最多调用 10000 次 TopVotedCandidate.q。
TopVotedCandidate.q(int t) 被调用时总是满足 t >= times[0]。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/online-election
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 记录最大选票数量,获胜者
  • 按时间顺序记录下获胜者,然后二分查找小于等于 t 时刻的最后一个时间点,读取该时刻的获胜者
class TopVotedCandidate {vector<int> winner;vector<int> T;
public:TopVotedCandidate(vector<int>& persons, vector<int>& times) {int maxVotes = 0, winId = -1;unordered_map<int,int> votes;//人,得票数T = times;for(int i = 0; i < persons.size(); ++i) {votes[persons[i]]++;if(votes[persons[i]] >= maxVotes){winId = persons[i];maxVotes = votes[persons[i]];}winner.push_back(winId);}}int q(int t) {int l = 0, r = T.size()-1, mid;while(l <= r)//找小于等于我的最后一个时刻{mid = l +((r-l)>>1);if(T[mid] > t)r = mid-1;else{if(mid == T.size()-1 || T[mid+1] > t)return winner[mid];elsel = mid+1;}}return -1;}
};

532 ms 91.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 911. 在线选举(二分查找)相关推荐

  1. leetcode 911在线选举

    911. 在线选举 难度中等109 给你两个整数数组 persons 和 times .在选举中,第 i 张票是在时刻为 times[i] 时投给候选人 persons[i] 的. 对于发生在时刻 t ...

  2. LeetCode:911. 在线选举————中等

    题目 911. 在线选举 给你两个整数数组 persons 和 times .在选举中,第 i 张票是在时刻为 times[i] 时投给候选人 persons[i] 的. 对于发生在时刻 t 的每个查 ...

  3. LeetCode简单题之二分查找

    题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...

  4. 5、leetcode剑指offer53 二分查找之0~n-1缺失的数字**

    leetcode剑指offer53 二分查找之0~n-1缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个 ...

  5. leetcode刷题笔记——二分查找

    leetcode刷题笔记--二分查找 目前完成的贪心相关的leetcode算法题序号: 中等:80,81 困难:4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com ...

  6. leetcode 911. Online Election | 911. 在线选举(加强堆 + 二分查找)

    题目 https://leetcode.com/problems/online-election/ 题解 我的解法是,用预计算(加强堆,O(nlogn)) + 二分查找(用的自带TreeMap,查找复 ...

  7. leetcode每日一题 911在线选举

    思路:主要是预处理,记录一个当前时刻最大值,遍历times数组,得到每个时刻的领先人,方法是记录一个当前的最大值,比较当前时刻得票人和之前领先人的得票数就行了,最后二分查找要求的时刻之前的那个投票时刻 ...

  8. LeetCode题解:704.二分查找

    二分查找(easy) 更好的阅读体验应该是: 审题-思考 答题 整理-归纳 一.题目 LeetCode:704.二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 targe ...

  9. LeetCode 1064. 不动点(二分查找)

    文章目录 1. 题目 2. 解题 2.1 暴力搜 2.2 二分查找 1. 题目 给定已经按升序排列.由不同整数组成的数组 A,返回满足 A[i] == i 的最小索引 i. 如果不存在这样的 i,返回 ...

最新文章

  1. 十年学术生涯新开端:港中文助理教授周博磊宣布加入UCLA
  2. vdi voi idv区别_VDI桌面虚拟化和IDV桌面虚拟化到底有哪些不同
  3. MySQL实战课程---通过录像手把手带您学会当前互联网流行架构
  4. 技术系统进化法则是_技术系统进化法则
  5. CSS3实现图形曲线阴形和翘边阴影
  6. C++程序设计语言编程风格演变史
  7. Java统计每个大写字母的个数
  8. ExtJS,JQuery,Dojo的小比较
  9. 输入三科成绩 C语言,C语言题,对我的程序找错修改。输入10个学生学号,三科成绩,求总成绩和平均分,并按成绩由高到低输出...
  10. 软件测试——测试用例设计测试分类详解
  11. 双线性函数matlab,双线性插值(Matlab实现)
  12. i5200u处理器 HD5500集成显卡安装黑苹果教程
  13. 转载:手机银行技术讨论3
  14. android如何增加北斗定位,安卓手机怎么设置北斗导航图文教程
  15. SQLyog 新建mysql链接时 错误号码 2058
  16. 2023Java 并发编程面试题
  17. win10桌面计算机快捷没了,Win10桌面快捷方式图标消失了的解决方法介绍
  18. 基于语音的情绪识别系统(Python)
  19. axure6.5汉化最新正式破解版本下载(有注册码
  20. signal函数原型解读

热门文章

  1. 盘点key value在各个编程语言中的类型
  2. Flask中的 url_for() 函数
  3. oracle放在内存里,oracle如中何把小表钉住在内存中
  4. 人脸识别进水_万维|人脸识别闸机怎么选?
  5. kalilinux装到u盘上的弊端_付费下载的歌曲,竟然无法在汽车上播放!原因在这里...
  6. 火山去水印链接_在线批量去水印下载快手图集视频、抖音、火山等平台方法技巧!...
  7. uboot源码——mmc驱动分析
  8. C++离航篇——函数默认参数、函数重载、内敛函数
  9. [转]微信小程序登录逻辑梳理
  10. What code you will get when you create a wcf library