news 2026/3/19 18:50:07

二分搜索(十一)911. 在线选举

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二分搜索(十一)911. 在线选举

911. 在线选举

给你两个整数数组personstimes。在选举中,第i张票是在时刻为times[i]时投给候选人persons[i]的。

对于发生在时刻t的每个查询,需要找出在t时刻在选举中领先的候选人的编号。

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

实现TopVotedCandidate类:

  • TopVotedCandidate(int[] persons, int[] times)使用personstimes数组初始化对象。
  • int q(int 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]解释:TopVotedCandidate topVotedCandidate = new TopVotedCandidate([0, 1, 1, 0, 0, 1, 0], [0, 5, 10, 15, 20, 25, 30]); topVotedCandidate.q(3); // 返回 0 ,在时刻 3 ,票数分布为 [0] ,编号为 0 的候选人领先。 topVotedCandidate.q(12); // 返回 1 ,在时刻 12 ,票数分布为 [0,1,1] ,编号为 1 的候选人领先。 topVotedCandidate.q(25); // 返回 1 ,在时刻 25 ,票数分布为 [0,1,1,0,0,1] ,编号为 1 的候选人领先。(在平局的情况下,1 是最近获得投票的候选人)。 topVotedCandidate.q(15); // 返回 0 topVotedCandidate.q(24); // 返回 0 topVotedCandidate.q(8); // 返回 1
#include <vector> #include <unordered_map> #include <algorithm> using namespace std; class TopVotedCandidate { private: vector<int> times; // 存时间点 vector<int> winners; // winners[i] 代表在 times[i] 这个时刻的赢家 public: TopVotedCandidate(vector<int>& persons, vector<int>& times) { this->times = times; unordered_map<int, int> voteCounts; // 记录每个人的票数 int topCandidate = -1; // 当前赢家 int topVotes = 0; // 当前最高票数 // 1. 预处理:遍历每一张选票 for (int i = 0; i < persons.size(); ++i) { int p = persons[i]; voteCounts[p]++; // 给他投一票 // 2. 更新赢家逻辑 // 题目规定:票数相等时,最近获得选票的人获胜。 // 因为我们是按时间顺序遍历的,所以只要当前这个人的票数 >= 当前最高票数 // 他就自动成为“最新的”赢家 if (voteCounts[p] >= topVotes) { topVotes = voteCounts[p]; topCandidate = p; } // 3. 记录这个时刻的赢家 winners.push_back(topCandidate); } } int q(int t) { // 4. 二分查找 // 我们要找 <= t 的最后一个时间点 // 使用 upper_bound 找到第一个 > t 的位置 auto it = upper_bound(times.begin(), times.end(), t); // 然后回退一步,就是 <= t 的位置 int index = prev(it)-times.begin(); // int index = distance(times.begin(), it) - 1; return winners[index]; } }; /** * Your TopVotedCandidate object will be instantiated and called as such: * TopVotedCandidate* obj = new TopVotedCandidate(persons, times); * int param_1 = obj->q(t); */
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 12:07:37

基于STM32单片机空气质量监测系统

目录 系统概述硬件组成软件设计应用场景优势与扩展 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 STM32单片机空气质量监测系统是一种基于STM32微控制器的嵌入式解决方案&#xff0c;用于实时检测环境中的空气质量参数&…

作者头像 李华
网站建设 2026/3/15 12:08:43

【Python教程05】-条件、循环及其他语句

05、Python 教程 - 条件、循环及其他语句 再谈 print 和 import print 现在实际上是一个函数 1&#xff0c;打印多个参数 用 逗号 分隔&#xff0c;打印多个表达式 sep 自定义分隔符&#xff0c;默认空格 end 自定义结束字符串&#xff0c;默认换行 print("beyond&qu…

作者头像 李华
网站建设 2026/3/15 16:59:00

开发者必看:麦橘超然DiffSynth-Studio集成部署推荐教程

开发者必看&#xff1a;麦橘超然DiffSynth-Studio集成部署推荐教程 你是否试过在显存只有8GB甚至6GB的显卡上跑Flux.1模型&#xff1f;刚点下生成按钮&#xff0c;显存就爆了&#xff0c;进程被系统强制杀掉——这种挫败感&#xff0c;很多本地AI绘画开发者都经历过。而今天要…

作者头像 李华
网站建设 2026/3/15 21:17:41

远程教学支持:Multisim安装离线配置方法

以下是对您提供的博文《远程教学支持&#xff1a;Multisim离线安装与仿真环境预配置技术分析》的 深度润色与专业重构版本 。本次优化严格遵循您的全部要求&#xff1a; ✅ 彻底去除AI痕迹&#xff0c;语言自然、专业、有“人味”——像一位在高校电类实验室摸爬滚打十年的工…

作者头像 李华
网站建设 2026/3/15 2:29:12

1024x1024高清输出!UNet人脸融合分辨率设置

1024x1024高清输出&#xff01;UNet人脸融合分辨率设置 在人脸融合的实际应用中&#xff0c;分辨率从来不只是一个数字参数——它直接决定着最终效果的专业度、细节表现力和落地可用性。你是否遇到过这样的情况&#xff1a;融合后的人脸边缘出现锯齿、皮肤纹理模糊不清、发丝细…

作者头像 李华