news 2026/7/14 18:42:08

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/7/3 13:58:34

零基础入门MGeo:手把手教你搭建地址相似度匹配系统

零基础入门MGeo&#xff1a;手把手教你搭建地址相似度匹配系统 1. 引言&#xff1a;从零开始理解地址相似度匹配的工程价值 在电商、物流、本地生活服务等场景中&#xff0c;地址数据的标准化与实体对齐是数据治理的核心挑战之一。由于用户输入习惯差异、缩写、错别字或表述方…

作者头像 李华
网站建设 2026/7/11 4:29:39

新手教程:搭建es连接工具调试环境的五个步骤

手把手教你搭建 Elasticsearch 调试环境&#xff1a;从连不通到查得动的实战指南你有没有遇到过这样的场景&#xff1f;写好了 Python 脚本&#xff0c;信心满满地运行es.search()&#xff0c;结果抛出一串红色异常&#xff1a;“ConnectionTimeoutError” 或 “Authentication…

作者头像 李华
网站建设 2026/7/1 8:13:35

明明代码没泄漏,为啥还 OOM?Debug 日志:这个锅我背

Debug 日志对应用服务的影响&#xff1a;全面分析与优化建议 Debug 日志是开发和运维中排查问题的核心工具&#xff0c;但不规范的使用会对应用服务的性能、稳定性和资源占用产生显著负面影响。以下从性能开销、资源消耗、稳定性风险、安全隐患四个维度详细分析&#xff0c;并…

作者头像 李华
网站建设 2026/7/9 1:17:07

GLM-TTS故障排查手册:10个常见问题解决方案

GLM-TTS故障排查手册&#xff1a;10个常见问题解决方案 &#x1f3b5; 零样本语音克隆 情感表达 音素级控制 webUI二次开发by 科哥 微信&#xff1a;312088415 1. 引言 GLM-TTS 是由智谱开源的高性能文本转语音&#xff08;TTS&#xff09;模型&#xff0c;支持零样本音色克…

作者头像 李华
网站建设 2026/7/1 0:38:31

手把手教你用Z-Image-Turbo生成图片,附避坑指南

手把手教你用Z-Image-Turbo生成图片&#xff0c;附避坑指南 1. 引言&#xff1a;为什么选择 Z-Image-Turbo&#xff1f; 1.1 背景与定位 Z-Image-Turbo 是阿里巴巴通义实验室推出的高效图像生成模型&#xff0c;专为速度和质量平衡而设计。作为 Z-Image 系列的蒸馏优化版本&…

作者头像 李华
网站建设 2026/7/5 3:31:04

Qwen2.5-0.5B创作助手:内容生成指南

Qwen2.5-0.5B创作助手&#xff1a;内容生成指南 1. 引言 随着大模型技术的普及&#xff0c;轻量化、高响应的AI助手在边缘计算和本地部署场景中展现出巨大价值。Qwen/Qwen2.5-0.5B-Instruct 作为通义千问系列中最小的指令微调模型&#xff0c;凭借其极低资源消耗与快速推理能…

作者头像 李华