当前位置: 首页 > news >正文

D.二分查找-进阶——658. 找到 K 个最接近的元素

题目链接:658. 找到 K 个最接近的元素(中等)

算法原理:

解法一:排序

19ms击败13.08%

时间复杂度O(NlogN)

这个解法其实挺暴力的,直接用把arr全扔链表里,然后按照题目要求把链表排序,最后取出前K个即可,别忘了返回前排个序

解法二:双指针+二分查找

3ms击败100.00%

时间复杂度O(NlogN)

利用题目给的arr已升序排序的条件,可根据x把arr分成两部分,前一部分都<x,后一部分都≥x,我们可以只用一次二分查找即可,先确定right,那么left就是right-1,确定right用到求最左端点模型👇

优选算法-二分:18.在排序数组中查找元素的第一个和最后一个位置

然后通过移动left和right确定一个[left+1,right-1]区间,这个区间内的元素即答案

如何移动呢?👇

如果left越界:left<0,只能right++

如果right越界:right>=arr.length,只能left--

都不越界就按题意来移动:

如果x和left的差<=x和right的差,就left--,因为差值相同时,题目规定取小的

如果x和left的差>x和right的差,就right++

Java代码:

class Solution { //解法一:排序 public List<Integer> findClosestElements(int[] arr, int k, int x) { List<Integer> list=new ArrayList<>(); for(int a:arr) list.add(a); Collections.sort(list,new Comparator<Integer>(){ @Override public int compare(Integer a,Integer b){ if(Math.abs(x-a)!=Math.abs(x-b)) return Math.abs(x-a)-Math.abs(x-b); else return a-b; } }); List<Integer> ret=list.subList(0,k); Collections.sort(ret); return ret; } }
class Solution { //解法二:双指针+二分查找 public List<Integer> findClosestElements(int[] arr, int k, int x) { int right=binarySearch(arr,x); int left=right-1; //维护[left,right]作为结果区间 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> ret=new ArrayList<>(); for(int i=left+1;i<right;i++) ret.add(arr[i]); return ret; } public int binarySearch(int[] arr,int x){ //最左端点模型 int left=0,right=arr.length-1; while(left<right){ int mid=left+(right-left)/2; if(arr[mid]<x) left=mid+1; else right=mid; } return left; } }
http://www.jsqmd.com/news/255622/

相关文章:

  • Java SpringBoot+Vue3+MyBatis 抗疫物资管理系统系统源码|前后端分离+MySQL数据库
  • 【2025最新】基于SpringBoot+Vue的学生网上请假系统管理系统源码+MyBatis+MySQL
  • gpt-oss-20b-WEBUI实战:云端10分钟部署,2块钱玩一下午
  • BGE-M3一键启动:语义搜索实战指南(附避坑技巧)
  • DeepSeek-R1-Distill-Qwen-1.5B高效运维:日志监控与性能分析实战
  • 如何高效批量抠图?试试CV-UNet大模型镜像,本地部署秒级出图
  • Qwen3-VL-WEB保姆级教程:多语言文本识别实战应用
  • GPT-OSS-20B-WEBUI操作手册:管理员后台管理功能
  • Qwen3-Embedding-0.6B最佳实践:云端部署省时省力
  • 从零部署高精度中文ASR|科哥FunASR镜像全解析
  • Qwen2.5-7B模型优化:内存访问模式改进
  • UI-TARS-desktop入门实战:Qwen3-4B-Instruct模型基础功能体验
  • Hunyuan-HY-MT1.5-1.8B实操:chat_template自定义教程
  • 体验AI不花冤枉钱:云端GPU按需计费,用多少付多少
  • YOLO26适合Jetson?嵌入式部署可行性分析
  • 学生党福音!VibeThinker-1.5B帮你刷题提分
  • Qwen3-4B节省40%能耗:低精度推理部署实战评测
  • Proteus汉化补丁使用指南:实战案例演示流程
  • I2C硬件滤波对信号影响:实战案例分析去抖设计
  • 开发者必看:Qwen3Guard-Gen-WEB镜像快速部署入门教程
  • Qwen3-Reranker-4B性能优化:让文本排序速度提升3倍
  • Paraformer-large识别精度低?Punc标点模块调优实战案例解析
  • BGE-Reranker-v2-m3为何选它?高精度rerank模型对比分析
  • NewBie-image-Exp0.1部署手册:GPU资源配置与显存优化技巧
  • 手把手教你用Z-Image-Turbo生成图片,附避坑指南
  • 一键生成个性化语音!Voice Sculptor镜像使用全解析
  • 从零开始使用AutoGen Studio开发AI应用
  • Qwen1.5-0.5B-Chat工具推荐:Transformers CPU适配镜像测评
  • Wan2.2-T2V-A5B入门必看:ComfyUI环境下一键生成视频详细步骤
  • 零基础入门语音端点检测:FSMN-VAD控制台一键启动教程