news 2026/9/3 3:56:41

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 22:45:53

体验AI不花冤枉钱:云端GPU按需计费,用多少付多少

体验AI不花冤枉钱&#xff1a;云端GPU按需计费&#xff0c;用多少付多少 作为一名在AI领域摸爬滚打十多年的技术老兵&#xff0c;我太理解教学场景下的痛点了。你是不是也遇到过这种情况&#xff1a;想让学生体验最新的大模型技术&#xff0c;但学校机房的设备还停留在"上…

作者头像 李华
网站建设 2026/9/2 22:10:56

效果展示:通义千问2.5-7B-Instruct打造的智能写作助手案例

效果展示&#xff1a;通义千问2.5-7B-Instruct打造的智能写作助手案例 1. 引言&#xff1a;为何选择通义千问2.5-7B-Instruct构建智能写作助手 在当前大模型快速发展的背景下&#xff0c;如何选择一个性能强、响应快、部署灵活且支持商用的开源模型&#xff0c;成为构建垂直领…

作者头像 李华
网站建设 2026/9/3 2:23:06

BGE-M3一键启动:语义搜索实战指南(附避坑技巧)

BGE-M3一键启动&#xff1a;语义搜索实战指南&#xff08;附避坑技巧&#xff09; 1. 引言 1.1 业务场景与技术背景 在当前信息爆炸的时代&#xff0c;高效、精准的语义搜索已成为智能应用的核心能力之一。无论是知识库问答系统、推荐引擎还是文档检索平台&#xff0c;背后都…

作者头像 李华
网站建设 2026/9/2 22:43:26

从零部署高精度中文ASR|科哥FunASR镜像全解析

从零部署高精度中文ASR&#xff5c;科哥FunASR镜像全解析 1. 引言&#xff1a;为什么选择科哥定制版FunASR&#xff1f; 在语音识别&#xff08;ASR&#xff09;技术快速发展的今天&#xff0c;构建一个高精度、低延迟、易用性强的本地化中文语音识别系统已成为智能硬件、数字…

作者头像 李华
网站建设 2026/9/2 23:27:15

亲测OpenDataLab MinerU:学术论文解析效果超乎想象

亲测OpenDataLab MinerU&#xff1a;学术论文解析效果超乎想象 1. 引言&#xff1a;为何需要智能文档理解工具&#xff1f; 在科研与工程实践中&#xff0c;学术论文、技术报告和扫描文档构成了知识获取的主要来源。然而&#xff0c;这些文档往往以PDF或图像形式存在&#xf…

作者头像 李华
网站建设 2026/9/3 2:31:49

UI-TARS-desktop入门实战:Qwen3-4B-Instruct模型基础功能体验

UI-TARS-desktop入门实战&#xff1a;Qwen3-4B-Instruct模型基础功能体验 1. UI-TARS-desktop简介 Agent TARS 是一个开源的多模态 AI Agent 框架&#xff0c;致力于通过融合视觉理解&#xff08;Vision&#xff09;、图形用户界面操作&#xff08;GUI Agent&#xff09;等能…

作者头像 李华