【C++二分查找】2817. 限制条件下元素之间的最小绝对差

news2024/9/21 0:51:41

本文涉及的基础知识点

C++二分查找

LeetCode2817. 限制条件下元素之间的最小绝对差

给你一个下标从 0 开始的整数数组 nums 和一个整数 x 。
请你找到数组中下标距离至少为 x 的两个元素的 差值绝对值 的 最小值 。
换言之,请你找到两个下标 i 和 j ,满足 abs(i - j) >= x 且 abs(nums[i] - nums[j]) 的值最小。
请你返回一个整数,表示下标距离至少为 x 的两个元素之间的差值绝对值的 最小值 。
示例 1:
输入:nums = [4,3,2,4], x = 2
输出:0
解释:我们选择 nums[0] = 4 和 nums[3] = 4 。
它们下标距离满足至少为 2 ,差值绝对值为最小值 0 。
0 是最优解。
示例 2:
输入:nums = [5,3,2,10,15], x = 1
输出:1
解释:我们选择 nums[1] = 3 和 nums[2] = 2 。
它们下标距离满足至少为 1 ,差值绝对值为最小值 1 。
1 是最优解。
示例 3:
输入:nums = [1,2,3,4], x = 3
输出:3
解释:我们选择 nums[0] = 1 和 nums[3] = 4 。
它们下标距离满足至少为 3 ,差值绝对值为最小值 3 。
3 是最优解。
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 109
0 <= x < nums.length

C++二分查找

不失一般性,不妨令i <= j,那么i i n in in [0,j-x]。
我们有序集合s记录nums[0…j-x],要使绝对差最小,有两种可能:
集合中小于nums[j]的最大值
集合中大于等于nums[j]的最小值。
it = s.lower_bound(nums[j])
it和–it分别指向这两个值。

代码

核心代码

class Solution {
		public:
			int minAbsoluteDifference(vector<int>& nums, int x) {
				set<int> s;
				int ret = 1000'000'000;
				for (int i = 0; i < nums.size(); i++) {
					const int end = i - x;
					if (end >= 0) {
						s.emplace(nums[end]);
					}
					auto it = s.lower_bound(nums[i]);
					if (s.end() != it) {
						ret = min(ret, *it - nums[i]);
					}
					if (s.begin() != it) {
						ret = min(ret, nums[i] - *(--it));
					}
				}
				return ret;
			}
		};

单元测试

	vector<int> nums;
		int x;
		TEST_METHOD(TestMethod11)
		{
			nums = { 4, 3, 2, 4 }, x = 2;
			auto res = Solution().minAbsoluteDifference(nums, x);
			AssertEx(0, res);
		}
		TEST_METHOD(TestMethod12)
		{
			nums = { 5,3,2,10,15 }, x =1;
			auto res = Solution().minAbsoluteDifference(nums, x);
			AssertEx(1, res);
		}
		TEST_METHOD(TestMethod13)
		{
			nums = { 1,2,3,4 }, x = 3;
			auto res = Solution().minAbsoluteDifference(nums, x);
			AssertEx(3, res);
		}

扩展阅读

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

视频课程

先学简单的课程,请移步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/2073122.html

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

相关文章

python应用之内置hashlib库的哈希算法介绍

hashlib 是 Python 的一个内置模块&#xff0c;提供了像 SHA1, SHA256, MD5 等哈希算法。可以接受任意长度的字节数据作为输入&#xff0c;并输出一个固定长度的“哈希值”&#xff0c;通常用于校验数据的完整性。而且该算法是不可逆的&#xff0c;不能通过哈希值反算出原始数据…

zookeeper服务搭建

zookeeper服务搭建 前言1. 前置准备2. 下载和解压Zookeeper3. 配置环境变量4. 编辑Zookeeper配置文件5. 配置Zookeeper节点ID6. 配置好的Zookeeper分发到其他节点7. 启动Zookeeper集群参考博客 前言 Zookeeper是一个开源的分布式协调服务&#xff0c;主要用于解决分布式应用中的…

【Excal】OR 函数

语法&#xff1a; OR&#xff08;判断条件1&#xff0c;判断条件2&#xff0c;判断体件3&#xff0c;****&#xff09; 评优条件&#xff1a; 语文成绩高于90 数学成绩高于90 英语成绩高于85 物理成绩高于85 点击回车键 选中填充 回车 选中填充

echart legend 的使用及离开界面图表全局销毁

父组件 <template><AbnormalAlarmStatistics ref"abnormalAlarmStatistics" /> </template> <script setup> import {ref,reactive,computed,onMounted,getCurrentInstance,watch } from "vue";const { proxy } getCurrentInsta…

CentOS Docker搭建Mysql5.7集群

MySQL Replication MySQL提供了Replication功能&#xff0c;可以实现将一个数据库的数据同步到多台其他数据库。前者通常称之为主库&#xff08;master&#xff09;&#xff0c;后者则被称从库&#xff08;slave&#xff09;。MySQL复制过程采用异步方式&#xff0c;但延时非常…

图解Redis五大数据类型

五种数据类型的不同之处&#xff0c;是value在存储时的形式不同。 hash类型 value类型是<key,value>键值对。如果发生hash冲突&#xff0c;用开放定址法解决&#xff0c;不拉链&#xff01; key值重复&#xff0c;则新值覆盖旧值 List类型 Set类型 与List的类似&…

嵌入式Keil工具【微库】和【标准库】的对比

我们在学习或者用单片机做开发的时候,输出信息以及打印调试基本都会有用的 printf 函数,那么,这个时候基本都会用到【微库】。 如果使用 Keil 软件,就会勾选配置中的微库(MicroLib),如下图: 同样,在IAR、 e2 studio等开发单片机的集成开发环境中,也有类似的配置选项。…

电脑远程监控桌面软件集锦|(2024全网优秀资源整理!)

电脑远程监控桌面软件在企业管理和个人应用中扮演着重要的角色。 这些工具可以帮助企业提升工作效率、保护数据安全&#xff0c;同时也能在个人使用时提供便利。 以下是几款优秀的电脑远程监控桌面软件及其主要功能介绍&#xff1a; 1中科安企 特点&#xff1a;一款备受企业…

2024年第十五届蓝桥杯图形化省赛真题分享包含答案

Scratch初级:8月24日9:30-11:00 Scratch中级:8月24日14:00-15:30 Python:8月25日9:30-11:00 C++:8月25日14:00-15:30 这次考了哪些内容呢,我们来大概看看(编程题没有答案,编程题有,大家可以评论群留言单选题的答案):

智能手机摄影的发展方向全面分析

智能手机摄影技术在过去十年间取得了长足的进步&#xff0c;成为许多消费者购买手机时的主要考量因素。随着硬件和软件技术的不断创新&#xff0c;手机摄影的能力越来越接近甚至在某些方面超越了传统相机。本文将从多个角度分析手机摄影的发展方向&#xff0c;包括硬件、软件、…

2024年【防爆电气】找解析及防爆电气模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 防爆电气找解析考前必练&#xff01;安全生产模拟考试一点通每个月更新防爆电气模拟试题题目及答案&#xff01;多做几遍&#xff0c;其实通过防爆电气理论考试很简单。 1、【单选题】()电气设备没有防爆的外壳和保护…

IDEA中切换jdk的版本(环境配置)

一、问题 二、过程 IDEA切换jdk 电脑中切换jdk 如果改变之后&#xff0c;依然没有变化的情况&#xff0c;可以使用where java命令删除路径为“.\Oracle\Java\javapath\”下的java.exe、javac.exe等三个文件。

【TB作品】MSP430F149单片机,数字时钟万年历程序,滚动显示特效

一、 万年历 任务要求&#xff1a; 制作一个万年历&#xff0c;具有显示时间、日期、温度、湿度、闹钟功能。 1、OLED显示屏上显示日期和时钟&#xff08;显示到秒&#xff0c;时间可走动&#xff09;&#xff1b;&#xff08;20分&#xff09; 2、通过开发板上的温度传感器采集…

Java小白一文简单普及Java中的String关键字

String类 String对象用于保存字符串&#xff0c;也就是一组字符序列 字符串常量对象是用双引号括起的字符序列&#xff0c;例如 “Kerwin” 字符串的字符使用Unicode字符编码&#xff0c;一个字符&#xff08;不区分字母还是汉字&#xff09;占两个字节 String类较常用构造方…

婚宴座位号怎样查?

在婚宴的温馨氛围中&#xff0c;快速准确地找到座位是每位宾客的期待。本文将带您领略如何通过一系列简单步骤&#xff0c;在电脑端和小程序中查询座位号&#xff0c;确保每位宾客都能享受到这场庆典的每一个细节。 第一章&#xff1a;电脑端查询信息上传 1. 官网登录&#x…

基于状态机实现的按键释放、消抖、单击、双击、长按等功能

状态机理论&#xff1a; 每次只能执行状态机中的一个状态 注意&#xff1a;状态转移时有时会根据需要发生不同的动作(可根据不同条件发生不同的动作)&#xff0c;此处的发生动作指返回按键码值&#xff08;代表那个按键的对应状态&#xff09; 如果是在长按状态在向释放状态迁…

分享一个基于python的内蒙古旅游景点数据分析与采集系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

【算法进阶1】贪心算法、背包问题(0-1背包、分数背包)、拼接最大数字问题、活动选择问题

1 贪心算法 2 背包问题 2.1 0-1背包问题 2.2 分数背包 3 拼接最大数字问题 4 活动选择问题 1 贪心算法 贪心算法(又称贪婪算法)是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。 也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;他所做出…

基于虚拟下垂控制的分布式电源并网建模仿真

针对并联逆变器间的环流和功率分配不均的问题&#xff0c;提出了一种基于改进虚拟阻抗的微电网逆变器下垂控制策略&#xff0c;对传统下垂控制算法的有功功率和无功功率进行分析&#xff0c;虚拟阻抗引入到电压电流双环控制策略。 在MATLAB中建立了逆变器并联运行的分布式仿真模…

【Qt】贪吃蛇

目录 贪吃蛇小游戏 一.项目介绍及演示 1. 项目介绍 2. 项目演示 3. 窗口介绍 3.1 游戏大厅窗口 3.2 游戏关卡选择窗口 3.3 游戏房间窗口 二、创建项目及资源配置 1. 创建项目&#xff08;QWidget&#xff09; ​编辑 2. 资源配置&#xff08;图片声音素材&#xff0…