【大顶堆】个人练习-Leetcode-2170. Minimum Operations to Make the Array Alternating

题目链接:https://leetcode.cn/problems/minimum-operations-to-make-the-array-alternating/description/

题目大意:给一个数组nums[],要求将其变为alternating数组,即其所有奇数下标的元素相等,所有偶数下标的元素相等,且奇数元素下标的元素不等于偶数下标的元素。

思路:很明显贪心就行,保留奇数下标元素中,出现次数第一大和第二大的元素及其次数(保留至第二大是因为要满足奇偶下标元素不等)。同样保留偶数下标元素中,出现次数第一大和第二大的元素及其次数。然后算一算总数减去两个第一大元素次数即可,如果碰见元素相等,就顺延至第二大。顺延奇数的还是偶数的都试一下。如果所有元素都相等(也就是没有第二大),那么就没法减,不用操作。

主要还是写起来比较麻烦,刚开始自己维护了个保留第一大和第二大的方法,虽然过了,但看着太丑陋了,就换成了用一个大顶堆来维护的方法。此外,考虑到数组只有一个元素的情况,特殊处理。这样就保证了其他情况下,奇数和偶数下标都至少有一个第一大元素。

此外,因为priority_queue对于pair的比较是从first开始的,我们在构建大顶堆时,将哈希表中的first, second要互换一下再放进堆中,因为这样才是让【出现次数】被用来比较。

完整代码

class Solution {
public:int minimumOperations(vector<int>& nums) {if (nums.size() == 1)return 0;unordered_map<int, int> a;unordered_map<int, int> b;priority_queue<pair<int, int>> ha;priority_queue<pair<int, int>> hb;for (int i = 0; i < nums.size(); i+=2)a[nums[i]]++;for (int i = 1; i < nums.size(); i+=2)b[nums[i]]++;for (auto it = a.begin(); it != a.end(); it++) ha.emplace(make_pair(it->second, it->first));for (auto it = b.begin(); it != b.end(); it++) hb.emplace(make_pair(it->second, it->first));auto a1 = ha.top();auto b1 = hb.top();ha.pop();hb.pop();int ans1 = nums.size() - a1.first;if (a1.second != b1.second) ans1 -= b1.first;else {if (!hb.empty()) {ans1 -= hb.top().first;}}int ans2 = nums.size() - b1.first;if (a1.second != b1.second) ans2 -= a1.first;else {if (!ha.empty()) {ans2 -= ha.top().first;}}return min(ans1, ans2);}
};

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

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

相关文章

【c++】C++ IO流

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

加密与安全_ 解读非对称密钥解决密钥配送问题的四个方案

文章目录 Pre对称密钥的死穴 - 经典的密钥配送问题什么是非对称密钥非对称密钥解决密钥配送问题的四个方案共享密钥密钥分配中心&#xff08;KDC&#xff09;Diffie-Hellman 密钥交换体系公钥密码体系RSA算法 Pre 对称密钥的死穴 - 经典的密钥配送问题 假设 Alice 和 Bob 两个人…

python开发基础——day11 函数作用域与名称空间

一、初识函数对象 函数非常重要&#xff0c;但是不要过于害怕&#xff0c;搞清楚本质 函数&#xff1a;更高级的容器&#xff0c;里面存的不是数据&#xff0c;而是代码 一个容器能干嘛&#xff0c;函数也可以干嘛 函数对象--把函数当成一个普通数据容器来使用 1.函…

B端界面:英文换成了中文,怎么就成了卖家秀和买家秀呢?

首先看看AI给我的回答。 为什么英文B端界面换成了中文 就成了卖家秀和买家秀呢&#xff1f; 这可能是因为平台希望吸引更多的中国卖家和买家。使用中文界面可以方便中国用户的操作和沟通&#xff0c;同时也能更好地满足他们的需求。卖家秀和买家秀可能是平台为了促进交流和展示…

HTML5实现我的音乐网站源码

文章目录 作者&#xff1a;[xcLeigh](https://blog.csdn.net/weixin_43151418) 1.设计来源1.1 界面效果1.2 轮播图界面1.3 音乐播放界面1.4 视频播放界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作…

FFmpeg 实现从摄像头获取流并通过RTMP推流

使用FFmpeg库实现从USB摄像头获取流并通过RTMP推流&#xff0c;FFmpeg版本为4.4.2-0。RTMP服务器使用的是SRS&#xff0c;拉流端使用VLC。如果想降低延时&#xff0c;首先需要配置SRS为Realtime模式&#xff0c;拉流的话就不要用VLC了&#xff0c;使用 ffplay 来拉流播放&#…

Python28-9 XGBoost算法

XGBoost&#xff08;eXtreme Gradient Boosting&#xff0c;其正确拼写应该是 "Extreme Gradient Boosting"&#xff0c;而XGBoost 的作者在命名时故意使用了不规范的拼写&#xff0c;将“eXtreme”中的“X”大写&#xff0c;以突出其极限性能和效率&#xff09;是一…

概论(二)随机变量

1.名词解释 1.1 样本空间 一次具体实验中所有可能出现的结果&#xff0c;构成一个样本空间。 1.2 随机变量 把结果抽象成数值&#xff0c;结果和数值的对应关系就形成了随机变量X。例如把抛一次硬币的结果&#xff0c;正面记为1&#xff0c;反面记为0。有变量相对应的就有自…

机器学习-利用 scikit-learn 使用梯度下降实现线性回归

线性回归是一种基本的统计学习方法&#xff0c;用于建立特征与连续目标变量之间的线性关系模型。其核心思想是通过最小化预测值与实际观测值之间的误差来拟合数据。这种模型假设自变量&#xff08;特征&#xff09;与因变量&#xff08;目标&#xff09;之间的关系是线性的&…

基于字典学习的地震数据降噪(MATLAB R2021B)

稀疏表示基于研究者们提出了许多变换基函数的方法逐渐成型&#xff0c;比如小波域&#xff0c;曲波域&#xff0c;dreamlet 域等&#xff0c;其原理是利用地震信号在变换域内的稀疏性和可分离性以去除噪声。继 Donoho发表非线性去噪方法-小波阈值萎缩方法&#xff0c;在后续的研…

半导体芯闻--20240707

1、韩国基础科学研究所团队开发出的亚纳米级半导体逻辑电路技术&#xff0c;实现了宽度小于1纳米的一维金属材料在二维电路中的应用。这一突破标志着下一代半导体及基础材料科学的重大进展&#xff0c;对解决传统半导体制造过程中的技术问题具有重要意义。 2、英特尔选择台积电…

HackTheBox--Headless

Headless测试过程 1 信息收集 NMAP端口扫描 nmap -sSCV 10.10.11.85000端口测试 检查页面功能&#xff0c;请求 For questions 功能&#xff0c;跳转到 /support 目录 目录扫描 发现 /dashboard 目录 访问 /dashboard 目录&#xff0c;显示未认证&#xff0c;如果通过认证…

MySQL之备份与恢复和MySQL用户工具(一)

备份与恢复 备份脚本化 为备份写一些脚本是标准做法。展示一个示例程序&#xff0c;其中必定有很多辅助内容&#xff0c;这只会增加篇幅&#xff0c;在这里我们更愿意列举一些典型的备份脚本功能&#xff0c;展示一些Perl脚本的代码片段。你可以把这些当作可重用的代码块&…

图解 RocketMQ 架构

写在前面 Kafka、RocketMQ都是很出名的中间件&#xff0c;上次我们讲解了Kafka&#xff0c;这次我们来讲讲RocketMQ的原理。 基本架构图 解析 RocketMQ 总共可以分成四个模块 NameServer&#xff1a;提供服务发现和路由功能&#xff0c;管理各种元数据信息。Broker&#xf…

基于最大相邻夹角的边缘点提取(matlab)

1、背景介绍 边缘点是指点云数据中代表物体或场景几何形状突变的那些点。在三维点云中&#xff0c;边缘点通常标志着不同表面或物体的分界&#xff0c;或者是物体表面上的不规则性&#xff0c;如裂缝、棱角、突起等。点云边缘检测的作用非常重要&#xff0c;最常见是进行特征点…

php校园二手交易网站-计算机毕业设计源码041148

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2 校园二手交易网站系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结…

AI学习指南机器学习篇-K均值聚类聚类数目选择

AI学习指南机器学习篇-K均值聚类聚类数目选择 在机器学习领域&#xff0c;K均值聚类是一种常用的无监督学习方法&#xff0c;用于将数据集分成K个类别。然而&#xff0c;选择适当的聚类数目K是一个常见的问题&#xff0c;因为不恰当的聚类数目选择可能导致聚类结果不理想。本文…

nginx配置代理

nginx配置代理 1. 安装并启动Nginx&#xff1a;2. 加载Nginx配置文件&#xff1a;3. 创建虚拟主机配置文件&#xff1a;4. 创建符号链接以启用虚拟主机&#xff1a;5. 检查配置文件语法是否正确&#xff1a;6. 重新加载Nginx配置&#xff1a;7. 配置反向代理&#xff1a;8. 高级…

MySQL安全加固

安全加固 禁止MySQL以管理员的身份账号权限运行 #用普通账户运行mysqld#加固方法&#xff1a; my.cnf配置文件中配置usermysql是否存在密码为空的用户 #1、sql_mode启用 NO_CREATE_AUTO_USER&#xff0c;这个参数&#xff08;NO_CREATE_AUTO_USER&#xff09;禁止自动创建密…

基于AOP的数据字典实现:实现前端下拉框的可配置更新

作者&#xff1a;后端小肥肠 创作不易&#xff0c;未经允许严禁转载。 目录 1. 前言 2. 数据字典 2.1. 数据字典简介 2.2. 数据字典如何管理各模块的下拉框 3. 数据字典核心内容解读 3.1. 表结构 3.2. 核心代码 3.2.1. 根据实体类名称获取下属数据字典 3.2.2. 数据字…