【C++二分查找】911. 在线选举

news2024/11/24 13:39:14

本文涉及的基础知识点

C++二分查找

LeetCode911. 在线选举

给你两个整数数组 persons 和 times 。在选举中,第 i 张票是在时刻为 times[i] 时投给候选人 persons[i] 的。
对于发生在时刻 t 的每个查询,需要找出在 t 时刻在选举中领先的候选人的编号。
在 t 时刻投出的选票也将被计入我们的查询之中。在平局的情况下,最近获得投票的候选人将会获胜。
实现 TopVotedCandidate 类:
TopVotedCandidate(int[] persons, int[] times) 使用 persons 和 times 数组初始化对象。
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
提示:
1 <= persons.length <= 5000
times.length == persons.length
0 <= persons[i] < persons.length
0 <= times[i] <= 109
times 是一个严格递增的有序数组
times[0] <= t <= 109
每个测试用例最多调用 104 次 q

预处理+二分查找

按顺序处理各票数,cnt记录当前各候选人的票数, top记录当前时间得票最高的候选人。当前候选人的票数 >= 当前最高票数,更换top。
tops 记录各top。
由于查询所在时间可能没有投票,所有不能it = lower_bound。
必须it = upper_bound。 --it。
构造函数(预处理)时间复杂度:O(n)。
查询复杂度:O(logn)

代码

核心代码

class TopVotedCandidate {
		public:
			TopVotedCandidate(vector<int>& persons, vector<int>& times) {
				vector<int> cnts(persons.size());
				int top = 0;
				for (int i = 0; i < persons.size(); i++) {
					auto& tmp = cnts[persons[i]];
					tmp++;
					if (tmp >= cnts[top]) {
						top = persons[i];
					}
					m_tops.emplace_back(top);
				}
				m_times = times;
			}

			int q(int t) {
				auto index = upper_bound(m_times.begin(), m_times.end(),t)-m_times.begin();
				return m_tops[index-1];
			}
			vector<int> m_tops,m_times;
		};

单元测试

vector<int> persons, times;
		TEST_METHOD(TestMethod11)
		{
			persons = {0, 1, 1, 0, 0, 1, 0}, times={ 0, 5, 10, 15, 20, 25, 30 };
			TopVotedCandidate tv(persons, times);
			vector<int> inputs = { 3 ,  12 ,  25, 15,  24 ,  8 },outs;
			for (const auto& i : inputs) {
				auto res = tv.q(i);
				outs.emplace_back(res);
			}			
			AssertEx({ 0, 1, 1, 0, 0, 1 }, outs);
		}

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 环境下Mysql没有开放公网端口连接创建数据库

一、情况描述&#xff1a; 服务器切换迁移&#xff0c;需要重新部署服务&#xff0c;由于该服务器上不能装docker&#xff0c;只能用apt命令安装 openjdk&#xff08;乌班图系统&#xff09;故只能用最原始的方法部署服务。 已知服务器IP地址&#xff0c;且服务器上面已经安装了…

一键解读Hive数仓工具!

在数字化时代&#xff0c;数据仓库已成为企业的核心资产&#xff0c;它不仅仅是一个存储大量数据的场所&#xff0c;更是企业洞察过去、把握现在、预见未来的重要工具。随着大数据技术的发展和应用&#xff0c;数据仓库的重要性愈发凸显&#xff0c;它能够帮助企业从海量的数据…

论文阅读:3D Gaussian Splatting for Real-Time Radiance Field Rendering

论文地址&#xff1a;https://arxiv.org/abs/2308.04079 代码地址&#xff1a;graphdeco-inria/gaussian-splatting: Original reference implementation of "3D Gaussian Splatting for Real-Time Radiance Field Rendering" (github.com) 概要 提出一个实时且能够…

React18快速入门

https://www.bilibili.com/video/BV1pF411m7wV 需要先安装并配置React相关的工具和插件 下载安装Node.js&#xff0c;这里以MacOS Node.js v22.6.0为例 终端命令行检查是否安装成功 node -v npm -vNode.js快速入门 npm设置镜像源 #设置为阿里镜像源 npm config set regist…

精准控图工具 Concept Sliders:超好用的 控制 Lora 适配器

Concept Sliders 你有没有遇到这样的情况&#xff1f;你花费大量时间制作提示和寻找种子&#xff0c;以使用文本到图像模型生成所需的图像。但是&#xff0c;你还需要对生成图像中的属性强度&#xff08;如眼睛大小或照明&#xff09;进行更细致、更精细的控制。修改提示会破坏…

141. 环形链表、142. 环形链表 II

题目 思路 链表无环情况&#xff1a;有空结点 链表有环&#xff1a;有些结点会重复 所以 用集合&#xff08;哈希表&#xff09;来记录遍历的结点 结点不存在&#xff0c;则将结点加到集合中&#xff0c;当遍历到的结点存在集合中&#xff0c;即为链表环开始的结点&#xff0c…

遥控器握杆的几种常见方式!!!

1. 双手持握法 站姿操作&#xff1a;站立时&#xff0c;两脚分开&#xff0c;比肩略宽&#xff0c;以保持身体稳定。双手持握遥控器的两侧&#xff0c;保持放松状态。 细节技巧&#xff1a; 轻轻地用无名指和小指托起遥控器&#xff0c;掌心和遥控器之间留有一定的空隙。 遥…

华为网络多生成树协议

多生成树协议 一个或多个vlan可以映射到同一个生成树中&#xff1b; MSTP将一个网络划分为多个域&#xff0c;每个域有多个生成树&#xff0c;域间利用CIST 公共与内部生成树commonand internal spanning tree 保证拓扑结构无环路&#xff1b; 实例即多个vlan的集合&#xf…

facebook投放版位选择技巧

卖家若想通过Facebook广告推广业务&#xff0c;首先需要了解Facebook广告的版位和展示位置。 Facebook广告版位包括动态消息、桌面右边栏、移动应用受众网络、Instagram版位和视频插播广告。动态消息版位分为桌面版和移动版&#xff0c;支持多种广告目标&#xff0c;如主页赞、…

算法-简化路径(71栈)

这道题&#xff0c;首先开头肯定是“/"而且不同级目录之间都是用"/"分割 所以我们首先将路径按”/“分割并把分割后的字符放到一个新的字符数组里面 然后开始遍历&#xff0c;如果为空或者.则忽略 如果为..则为返回上一级目录&#xff0c;栈顶弹出一个元素 否…

Spring MVC 处理请求

Servlet初始化 DispatcherServlet( 前端控制器 )是 Spring MVC中最核心的一个类&#xff0c; 它负责请求的行为流转, 接收请求、响应结果, 相当于转发器 。 那么在Servlet的初始化阶段&#xff0c;会调用 init() 方法进行各个组件的初始化操作&#xff0c;该方法 由其父类Http…

2024年9月15日(星期天)骑行古莲村

2024年9月15日 (星期天&#xff09;骑行古莲村&#xff0c;早8:30到9:00&#xff0c;大观公园门口集合&#xff0c;9:00准时出发【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:大观公园门口集合 &#xff0c;家住东&#xff0c;西&#xff0c;…

IGNAV_NHC分析

extern int nhc(insstate_t *ins,const insopt_t *opt,const imud_t *imu)函数名 insstate_t* ins IO ins state insopt_t* opt I ins options imud_t* imu I imu measurement data return : 1 (ok) or 0 (fail) 用NHC进行约束&#xff0c;其实用NHC做量测去…

Amazon EC2:灵活、可扩展的云计算解决方案

在当今数字化快速发展的时代&#xff0c;企业面临着不断变化的市场需求和技术挑战。为了保持竞争力&#xff0c;许多公司正在转向云计算&#xff0c;以提高业务的灵活性和可扩展性。而在众多云服务提供商中&#xff0c;Amazon Elastic Compute Cloud&#xff08;EC2&#xff09…

Initializing libiomp5md.dll, but found libiomp5md.dll already initialized

情况一&#xff1a;之前没有任何下载安装等其他异常操作&#xff0c;则直接使用的时候报错了。 可以检查一下自己anaconda的安装路径中是否存在两个该dll文件。比如我在pycharm中使用的是虚拟环境pytoch1.7&#xff0c;在pycharm的右小角可以看到自己当前使用的环境。 找到该环…

发展绿色新质生产力,创维汽车亮相2024国际数字能源展

2024年9月8日&#xff0c;2024国际数字能源展在深圳会展中心&#xff08;福田&#xff09;拉开帷幕&#xff0c;展会以“数能先锋 智创未来”为主题&#xff0c;设立7大展区&#xff0c;助力国内外供采链条对接交流。创维光伏储能以及搭载闪放闪充技术的创维汽车亮相此次会展。…

泽众ALM全新升级:多维度优化软件研发管理

泽众ALM(覆盖全生命周期的研发过程管理平台)&#xff0c;迎来了新一轮的更新。本次更新涵盖了需求管理、评审中心、环境管理、代码库管理、报工管理等多个模块&#xff0c;进一步提升了软件研发团队的协作效率与项目管理水平。 泽众ALM平台 一、需求管理更加灵活多样 本次更新…

Open-Vocabulary SAM: 分割并交互式识别两万类别。

摘要 CLIP和Segment Anything Model&#xff08;SAM&#xff09;是杰出的视觉基础模型&#xff08;VFMs&#xff09;。SAM在多个领域的分割任务中表现出色&#xff0c;而CLIP以其零样本识别能力而闻名。本文深入探索了将这两种模型整合到一个统一框架中。具体来说&#xff0c;…

【Linux】Ubuntu 22.04 shell实现MySQL5.7 tar 一键安装

参考 https://blog.csdn.net/qq_35995514/article/details/134350572?spm1001.2014.3001.5501 在原作者基础上做了修改&#xff0c;加了一个删除原有mysql 的脚本 文章目录 一、安装下载**my.cnf 配置文件** 二、执行安装**install_mysql.sh 安装脚本**本机免密脚本 ssh_keyge…

上汽大众:存储成本节约85%,查询性能提升5倍|OceanBase案例

近日&#xff0c;上汽大众汽车有限公司&#xff08;简称“上汽大众”&#xff09;的积分卡券等关键业务系统&#xff0c;已成功升级至 OB Cloud 云数据库。借助 OceanBase 原生分布式数据库的卓越性能与先进技术&#xff0c;实现了存储成本的大幅降低&#xff0c;高达85%&#…