news 2026/9/24 1:34:12

二分搜索(十一)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/9/20 11:00:15

基于光耦隔离的有源蜂鸣器驱动电路设计实例

以下是对您提供的技术博文进行 深度润色与结构重构后的专业级技术文章 。全文已彻底去除AI生成痕迹&#xff0c;采用真实工程师口吻撰写&#xff0c;逻辑层层递进、语言精炼有力&#xff0c;兼具教学性、实战性与工程思辨性。所有技术细节均严格基于原文内容展开&#xff0c;…

作者头像 李华
网站建设 2026/9/20 17:03:13

Qwen-Image-2512支持哪些尺寸?竖图横图都能生成

Qwen-Image-2512 支持哪些尺寸&#xff1f;竖图横图都能生成 本文由 源码七号站 原创整理&#xff0c;转载请注明出处。如果你正为AI绘图时总被固定比例卡住——想做手机壁纸却只能出方图&#xff0c;想配短视频封面却生成了横版&#xff0c;想给公众号排版却要反复裁剪……那…

作者头像 李华
网站建设 2026/9/20 17:08:19

UNet人脸融合应用场景盘点:娱乐、设计都能用

UNet人脸融合应用场景盘点&#xff1a;娱乐、设计都能用 人脸融合技术早已不是实验室里的概念玩具。当你在社交平台看到朋友“穿越”到电影海报里&#xff0c;当设计师三分钟生成十版明星同款风格的广告图&#xff0c;当短视频创作者让静态照片开口说话——背后很可能就是UNet…

作者头像 李华
网站建设 2026/9/23 8:39:17

FSMN-VAD实战体验:上传音频秒出语音时间段

FSMN-VAD实战体验&#xff1a;上传音频秒出语音时间段 你是否遇到过这样的问题&#xff1a;一段10分钟的会议录音里&#xff0c;真正说话的时间可能只有3分钟&#xff0c;其余全是静音、咳嗽、翻纸声甚至空调噪音&#xff1f;手动听写剪辑耗时费力&#xff0c;用传统工具又容易…

作者头像 李华
网站建设 2026/9/20 17:09:46

数字人创业新机会,Live Avatar商业应用场景解析

数字人创业新机会&#xff0c;Live Avatar商业应用场景解析 1. 为什么Live Avatar值得创业者关注 数字人技术正从实验室走向真实商业场景&#xff0c;但多数方案要么效果粗糙&#xff0c;要么成本高得离谱。Live Avatar的出现&#xff0c;像在拥挤的赛道里突然打开一扇新门—…

作者头像 李华
网站建设 2026/9/20 21:40:07

保姆级!网络安全零基础入门指南+全流程学习路径​

第一章&#xff1a;网络安全的基本概念和术语 网络安全是指保护网络系统、硬件、软件、数据以及用户的隐私和权益&#xff0c;防止其受到未经授权的访问、篡改、窃取或破坏。以下是一些网络安全的基本概念和术语&#xff1a; 漏洞&#xff08;Vulnerability&#xff09;&…

作者头像 李华