【LeetCode刷题-二分查找】--658.找到K个最接近的元素
658.找到K个最接近的元素

方法一:二分查找+双指针
- 假设数组长度为n,数组arr已经按照升序排序,可以将数组arr分为两部分,前一部分所有元素[0,left]都小于x,后一部分[right,n-1]都大于等于x,left与right都可以通过二分查找获得
- left和right指向的元素都是各自部分最接近x的元素,因此我们可以通过比较left和right指向的元素获取整体最接近x的元素,如果x-arr[left]≤arr[right]-x,则将left-1,否则将right+1,相应地,如果left或right已经越界,那么不考虑对应部分的元素
- 最后,区间[left+1,right-1]的元素就是需要获得的结果
class Solution {public List<Integer> findClosestElements(int[] arr, int k, int x) {int right = binarrySearch(arr,x);int left = right - 1;while(k-->0){if(left < 0){right++;}else if(right >= arr.length){left--;}else if(x - arr[left] <= arr[right] -x){left--;}else{right++;}}List<Integer> ans = new ArrayList<>();for(int i = left+1;i<right;i++){ans.add(arr[i]);}return ans;}public int binarrySearch(int[] arr,int x){int low = 0,high = arr.length - 1;while(low < high){int mid = low + (high - low) / 2;if(arr[mid] >= x){high = mid;}else{low = mid + 1;}}return low;}
}
方法二:二分查找
class Solution {public List<Integer> findClosestElements(int[] arr, int k, int x) {int left = 0,right = arr.length -1;while(right - left + 1>k){if(Math.abs(arr[left] - x) > Math.abs(arr[right] - x)){left++;}else{right--;}}List<Integer> result = new ArrayList<>();for (int i = left; i <= right; i++) {result.add(arr[i]); // 将选定范围内的元素添加到结果列表}return result;}
}
相关文章:
【LeetCode刷题-二分查找】--658.找到K个最接近的元素
658.找到K个最接近的元素 方法一:二分查找双指针 假设数组长度为n,数组arr已经按照升序排序,可以将数组arr分为两部分,前一部分所有元素[0,left]都小于x,后一部分[right,n-1]都大于等于x,left与right都可以…...
新方向!文心一言X具身智能,用LLM大模型驱动智能小车
具身智能已成为近年来研究的热点领域之一。具身智能强调将智能体与实体环境相结合,通过智能体与环境的交互,来感知和理解世界,最终实现在真实环境中的自主决策和运动控制。 如何基于文心大模型,低成本入门“具身智能”࿰…...
mysql.sock找不到怎么解决?
当我们连接mysql时找不到mysql.sock的时候会出现下列情况: cant connect to mysql server through socket /tmp/mysql.sock 解决方法: (1)找到mysql.sock 使用 find / -name mysql.sock 进行寻找。 如果找不到,那…...
微信小程序刷新当前页面(亲测有效)
有个小功能点,需要刷新当前页面,搜索了很多地方,发现很多搜索的结果其实并不准确。 有的调用的是this.onLoad方法,有的是调用的是this.onReady方法。其实都不能满足我的要求,其实我就只是想刷新下当前页面,…...
通过拉普拉斯特征映射降维
拉普拉斯特征映射(Laplacian Eigenmaps),主要包括拉普拉斯特征映射(Laplacian Eigenmaps)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 1 …...
【信息安全原理】——传输层安全(学习笔记)
📖 前言:为保证网络应用,特别是应用广泛的Web应用数据传输的安全性(机密性、完整性和真实性),可以在多个网络层次上采取安全措施。本篇主要介绍传输层提供应用数据安全传输服务的协议,包括&…...
GBDT减少模型偏差、随机森林减小模型方差
1、Adaboost算法原理,优缺点: 理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。 Adaboost…...
使用IDEA工具处理git合并后的冲突的细节
使用 IDEA 处理合并(merge) 使用IDEA处理git合并如果遇到冲突,对冲突文件的不冲突部分需要处理吗?会自动将双方不冲突的部分合并吗? 比如如下,使用 IDEA 合并 branch1 到 branch2 分支,出现了冲突,如下图…...
快速下载ChatGLM系列模型
1. 说明与步骤 在无法访问huggingface的网络环境下(或者是网速不够好时),(目前)还可以使用参考1中清华云盘的链接来下载,在linux下可以直接用如下wget命令来下载最耗时的模型部分。注意还需要把模型的.py等…...
【数据结构】顺序表 | 详细讲解
在计算机中主要有两种基本的存储结构用于存放线性表:顺序存储结构和链式存储结构。本篇文章介绍采用顺序存储的结构实现线性表的存储。 顺序存储定义 线性表的顺序存储结构,指的是一段地址连续的存储单元依次存储链性表的数据元素。 线性表的…...
100天精通风控建模(原理+Python实现)——第1天:什么是风控建模?
风控模型已在各大银行和公司都实际运用于业务,用于营销和风险控制等。本文以视频的形式阐述什么是风控建模,并提供风控建模原理和Python实现文章清单。首先了解什么是风控建模? 下文梳理风控模型搭建的原理和Python实现,按顺序做成清单的形式,点击即可进入相应文章链接。方…...
HTML转义字符
HTML,XML文件中存在部分字符作为标志字符无法作为文本内容使用,如< >,如果想在文本中输出,可使用转义字符。 < 的转义字符为 " < " > 的转义字符为 " > " <TextView.... ....android:t…...
【STM32】
STM32 1 CMSIS1.1 概述1.2 CMSIS 应用程序文件描述 2 库2.1 简介2.2 标准外设库(standrd Peripheral Libraries)2.3 HAL 库2.3.1 目录结构2.3.2 HAL库API函数和变量的命名规则2.3.3 HAL库对寄存器位操作的相关宏定义2.3.4 HAL库回调函数2.3.5 HAL使用注意…...
U盘不可以访问的维护
u盘打不开,可按下图,设置:winR→gpedit.msc;配置“管理模板”→“系统”→“可移动存储访问”→“所有可移动存储类”。 然后,选择“未配置”,如下图...
SpringCloud 微服务全栈体系(十三)
第十一章 分布式搜索引擎 elasticsearch 二、索引库操作 索引库就类似数据库表,mapping 映射就类似表的结构。 我们要向 es 中存储数据,必须先创建“库”和“表”。 1. mapping 映射属性 mapping 是对索引库中文档的约束,常见的 mapping …...
ROC 曲线详解
前言 ROC 曲线是一种坐标图式的分析工具,是由二战中的电子和雷达工程师发明的,发明之初是用来侦测敌军飞机、船舰,后来被应用于医学、生物学、犯罪心理学。 如今,ROC 曲线已经被广泛应用于机器学习领域的模型评估,说…...
113.路径总和II
原题链接:113.路径总和II 需复刷 思路: 跟112.路径总和不同,该题是要你找出所有相同的路径,那么此时就要注意存储,递归和回溯了。 全代码: class Solution { public:vector<vector<int>> re…...
【Linux】WSL安装Kali及基本操作
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍WSL安装Kali及基本操作。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路…...
Linux基础开发工具之调试器gdb
文章目录 1.编译成的可调试的debug版本1.1gcc test.c -o testdebug -g1.2readelf -S testdebug | grep -i debug 2.调试指令2.0quit退出2.1list/l/l 数字: 显示代码2.2run/r运行2.3断点相关1. break num/b num: 设置2. info b: 查看3. d index: 删除4. n: F10逐过程5. p 变量名…...
Apache APISIX 的 Admin API 默认访问令牌漏洞(CVE-2020-13945)漏洞复现
漏洞描述 Apache APISIX 是一个动态、实时、高性能的 API 网关。Apache APISIX 有一个默认的内置 API 令牌,可用于访问所有 admin API,通过 2.x 版本中添加的参数导致远程执行 LUA 代码。 漏洞环境及利用 启动docker环境 访问9080端口 通过 admin api…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
