LeetCode 911. 在线选举(二分查找)
文章目录
- 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. 在线选举(二分查找)相关推荐
- leetcode 911在线选举
911. 在线选举 难度中等109 给你两个整数数组 persons 和 times .在选举中,第 i 张票是在时刻为 times[i] 时投给候选人 persons[i] 的. 对于发生在时刻 t ...
- LeetCode:911. 在线选举————中等
题目 911. 在线选举 给你两个整数数组 persons 和 times .在选举中,第 i 张票是在时刻为 times[i] 时投给候选人 persons[i] 的. 对于发生在时刻 t 的每个查 ...
- LeetCode简单题之二分查找
题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...
- 5、leetcode剑指offer53 二分查找之0~n-1缺失的数字**
leetcode剑指offer53 二分查找之0~n-1缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个 ...
- leetcode刷题笔记——二分查找
leetcode刷题笔记--二分查找 目前完成的贪心相关的leetcode算法题序号: 中等:80,81 困难:4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com ...
- leetcode 911. Online Election | 911. 在线选举(加强堆 + 二分查找)
题目 https://leetcode.com/problems/online-election/ 题解 我的解法是,用预计算(加强堆,O(nlogn)) + 二分查找(用的自带TreeMap,查找复 ...
- leetcode每日一题 911在线选举
思路:主要是预处理,记录一个当前时刻最大值,遍历times数组,得到每个时刻的领先人,方法是记录一个当前的最大值,比较当前时刻得票人和之前领先人的得票数就行了,最后二分查找要求的时刻之前的那个投票时刻 ...
- LeetCode题解:704.二分查找
二分查找(easy) 更好的阅读体验应该是: 审题-思考 答题 整理-归纳 一.题目 LeetCode:704.二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 targe ...
- LeetCode 1064. 不动点(二分查找)
文章目录 1. 题目 2. 解题 2.1 暴力搜 2.2 二分查找 1. 题目 给定已经按升序排列.由不同整数组成的数组 A,返回满足 A[i] == i 的最小索引 i. 如果不存在这样的 i,返回 ...
最新文章
- 十年学术生涯新开端:港中文助理教授周博磊宣布加入UCLA
- vdi voi idv区别_VDI桌面虚拟化和IDV桌面虚拟化到底有哪些不同
- MySQL实战课程---通过录像手把手带您学会当前互联网流行架构
- 技术系统进化法则是_技术系统进化法则
- CSS3实现图形曲线阴形和翘边阴影
- C++程序设计语言编程风格演变史
- Java统计每个大写字母的个数
- ExtJS,JQuery,Dojo的小比较
- 输入三科成绩 C语言,C语言题,对我的程序找错修改。输入10个学生学号,三科成绩,求总成绩和平均分,并按成绩由高到低输出...
- 软件测试——测试用例设计测试分类详解
- 双线性函数matlab,双线性插值(Matlab实现)
- i5200u处理器 HD5500集成显卡安装黑苹果教程
- 转载:手机银行技术讨论3
- android如何增加北斗定位,安卓手机怎么设置北斗导航图文教程
- SQLyog 新建mysql链接时 错误号码 2058
- 2023Java 并发编程面试题
- win10桌面计算机快捷没了,Win10桌面快捷方式图标消失了的解决方法介绍
- 基于语音的情绪识别系统(Python)
- axure6.5汉化最新正式破解版本下载(有注册码
- signal函数原型解读
热门文章
- 盘点key value在各个编程语言中的类型
- Flask中的 url_for() 函数
- oracle放在内存里,oracle如中何把小表钉住在内存中
- 人脸识别进水_万维|人脸识别闸机怎么选?
- kalilinux装到u盘上的弊端_付费下载的歌曲,竟然无法在汽车上播放!原因在这里...
- 火山去水印链接_在线批量去水印下载快手图集视频、抖音、火山等平台方法技巧!...
- uboot源码——mmc驱动分析
- C++离航篇——函数默认参数、函数重载、内敛函数
- [转]微信小程序登录逻辑梳理
- What code you will get when you create a wcf library