news 2026/6/10 20:45:08

二分搜索(十一)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/6/10 10:54:03

Llama3与GPT-OSS对比:开源模型推理延迟实测

Llama3与GPT-OSS对比&#xff1a;开源模型推理延迟实测 1. 实测背景与测试目标 最近开源大模型圈里热闹得很&#xff0c;Llama3刚发布不久&#xff0c;OpenAI也悄悄放出了一个叫GPT-OSS的模型——注意&#xff0c;这不是官方命名&#xff0c;而是社区对某款开源推理实现的代称…

作者头像 李华
网站建设 2026/6/10 10:58:04

RISC-V片上网络(NoC)设计:大规模互连结构实战案例

以下是对您提供的技术博文进行 深度润色与专业重构后的版本 。我以一位深耕RISC-V SoC架构与NoC设计一线多年的工程师视角&#xff0c;彻底重写了全文—— 去除所有AI腔调、模板化结构和空泛术语堆砌&#xff0c;代之以真实项目经验、踩坑教训、设计取舍逻辑与可复用的工程直…

作者头像 李华
网站建设 2026/6/10 11:01:46

基于STM32单片机汽车尾气检测蓝牙 WIFI MQ135+MQ-7

目录STM32单片机汽车尾气检测系统概述硬件组成软件设计系统工作流程应用场景注意事项源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;STM32单片机汽车尾气检测系统概述 该系统基于STM32单片机&#xff0c;结合MQ-135&#xff08;检测CO…

作者头像 李华
网站建设 2026/6/10 12:44:11

verl金融风控模型训练实战:多场景落地详解

verl金融风控模型训练实战&#xff1a;多场景落地详解 1. verl 是什么&#xff1f;一个为大模型后训练而生的强化学习框架 你可能已经听说过用强化学习&#xff08;RL&#xff09;来优化大语言模型——比如让模型更懂用户偏好、更会写营销文案、更擅长逻辑推理。但真正把 RL …

作者头像 李华
网站建设 2026/6/10 12:35:28

Qwen-Image-Edit-2511功能测评:文本/外观/语义编辑全掌握

Qwen-Image-Edit-2511功能测评&#xff1a;文本/外观/语义编辑全掌握 这是一次实打实的深度体验。不是看参数表&#xff0c;也不是读技术白皮书&#xff0c;而是把Qwen-Image-Edit-2511镜像拉进ComfyUI&#xff0c;从第一张图开始编辑&#xff0c;到完成十组不同难度的修改任务…

作者头像 李华
网站建设 2026/6/10 12:46:20

Multisim14.3安装教程:虚拟机中部署实操完整示例

以下是对您提供的博文内容进行 深度润色与结构重构后的专业级技术文章 。整体风格更贴近一线嵌入式/EDA工程师的真实写作口吻&#xff1a;语言精炼、逻辑严密、有实战温度&#xff0c;摒弃模板化表达和空泛总结&#xff1b;所有技术点均围绕“ 为什么这么干&#xff1f;不这…

作者头像 李华