LeetCode——658. 找到 K 个最接近的元素(双指针)
文章目录
- 658. 找到 K 个最接近的元素(双指针)
- 题目
- 1、双指针法
- 思想:**
- 代码
- 2、二分法
- 思想:**
- 代码
658. 找到 K 个最接近的元素(双指针)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-k-closest-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目
给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。如果有两个数与 x 的差值一样,优先选择数值较小的那个数。示例 1:
输入: [1,2,3,4,5], k=4, x=3
输出: [1,2,3,4]示例 2:
输入: [1,2,3,4,5], k=4, x=-1
输出: [1,2,3,4]说明:
k 的值为正数,且总是小于给定排序数组的长度。
数组不为空,且长度不超过 104
数组里的每个元素与 x 的绝对值不超过 104更新(2017/9/19):
这个参数 arr 已经被改变为一个整数数组(而不是整数列表)。 请重新加载代码定义以获取最新更改。
1、双指针法
思想:**
找到k个最接近x的元素,相当于从原数组arr中删除len - k个元素剩余的元素,
而删除的依据是:当x与左端元素arr[left]差值大于x与右端元素arr[right]差值时,
说明x距离右端元素更近,所以删除左端元素;反之,删除右端元素;之后用列表存储返回即可
代码
/*
1、双指针法
找到k个最接近x的元素,相当于从原数组arr中删除len - k个元素剩余的元素,
而删除的依据是:当x与左端元素arr[left]差值大于x与右端元素arr[right]差值时,
说明x距离右端元素更近,所以删除左端元素;反之,删除右端元素;之后用列表存储返回即可
*/
class Solution {public List<Integer> findClosestElements(int[] arr, int k, int x) {List<Integer> res = new LinkedList<>();int len = arr.length;int left = 0, right = len - 1;int removNum = len - k;while(removNum != 0){if( (x - arr[left]) > (arr[right] - x) ){left++;}else{right--;}removNum--;}for(int i = left; i <= right; i++){res.add(arr[i]);}return res;}
}
2、二分法
思想:**
找到k个最接近x的元素,相当于从原数组arr中删除len - k个元素剩余的元素,
由于右端最多len - k个元素,所以右边界选择right = len - k;//注意右端点
而删除的依据是:当x与左端元素arr[mid]差值大于x与右端元素arr[mid + k]差值时,
说明x距离右半边元素更近,所以删除左半边元素;
反之,删除右半边元素;之后用列表存储返回即可
原理见大佬分析:
https://leetcode-cn.com/problems/find-k-closest-elements/solution/pai-chu-fa-shuang-zhi-zhen-er-fen-fa-python-dai-ma/
代码
/*
2、二分法
找到k个最接近x的元素,相当于从原数组arr中删除len - k个元素剩余的元素,
由于右端最多len - k个元素,所以右边界选择right = len - k;//注意右端点
而删除的依据是:当x与左端元素arr[mid]差值大于x与右端元素arr[mid + k]差值时,
说明x距离右半边元素更近,所以删除左半边元素;
反之,删除右半边元素;之后用列表存储返回即可
原理见大佬分析:
https://leetcode-cn.com/problems/find-k-closest-elements/solution/pai-chu-fa-shuang-zhi-zhen-er-fen-fa-python-dai-ma/
*/
class Solution {public List<Integer> findClosestElements(int[] arr, int k, int x) {List<Integer> res = new LinkedList<>();int len = arr.length;int left = 0, right = len - k;//注意右端点while(left < right){int mid = left + (right - left) / 2;if( (x - arr[mid]) > (arr[mid + k] - x) ){left = mid + 1;}else{right = mid;}}for(int i = left; i < left + k; i++){res.add(arr[i]);}return res;}
}
LeetCode——658. 找到 K 个最接近的元素(双指针)相关推荐
- leetcode 658. 找到 K 个最接近的元素
leetcode 658. 找到 K 个最接近的元素 题目描述: 给定一个排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排 ...
- Java实现 LeetCode 658 找到 K 个最接近的元素(暴力)
658. 找到 K 个最接近的元素 给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的.如果有两个数与 x 的差值一样,优先 ...
- LeetCode 658. 找到 K 个最接近的元素(二分查找)
1. 题目 给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的.如果有两个数与 x 的差值一样,优先选择数值较小的那个数. ...
- 【LeetCode通关全记录】658. 找到 K 个最接近的元素
[LeetCode通关全记录]658. 找到 K 个最接近的元素 题目地址
- LeetCode 每日一题——658. 找到 K 个最接近的元素
1.题目描述 658. 找到 K 个最接近的元素 给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的. 整数 ...
- 【658. 找到 K 个最接近的元素】
来源:力扣(LeetCode) 描述: 给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的. 整数 a ...
- 658. 找到 K 个最接近的元素
给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的. 整数 a 比整数 b 更接近 x 需要满足: |a - ...
- leetcode 658. Find K Closest Elements | 658. 找到 K 个最接近的元素(二分查找+双指针)
题目 https://leetcode.com/problems/find-k-closest-elements/ 题解 在arr中找到第一个小于等于x的位置mid,然后再根据题意,用双指针分别向左. ...
- 【LeetCode Python实现】658. 找到 K 个最接近的元素(中等)
文章目录 题目描述 示例 1: 示例 2: 提示: 参考代码 题目描述 给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要 ...
最新文章
- nginx是什么,如何使用
- 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 权限申请原理对话框操作回调接口 | 永久拒绝权限后引导设用户置权限 )
- HTML学习03之列表,表格,媒体元素
- ERROR Cannot determine the location of the VS Common Tools Folder
- HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面...
- 深度学习之 BP 算法
- 刀塔传奇公会管理系统 ------ Python界面访问Pgsql
- 写给非网工的CCNA教程(4)聊聊ping命令后的原理(续)
- Windows环境下JDK安装与环境变量配置
- 互联网网站采集工具大比拼和选择指南
- 手机双拼输入法下的智能纠错
- Druid连接池原理
- 马克思主义基本原理概论
- bzoj5145 [Ynoi2018]未来日记 (多校第4场1013 Yuno and Claris)
- clickhouse-client命令行参数及常用案例
- Showwindow 及参数
- python中close函数的用法_skft包 pythonpython close()是什么?python close()定义及用法详解...
- python在煤矿的用途-息烽高校邦数据科学通识课【Python爬虫】答案
- java深拷贝的三种方式
- 讯飞智能语音鼠标G50:AI语音、转写翻译、记录截图一键搞定!
热门文章
- 计算机配件的选购标准,计算机配置方案与配件选购
- Liblinear机器学习库教程详解(基于Python API)
- RuntimeError: populate() isn‘t reentrant
- Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数
- 连续三年缩招,北交电信竞争愈演愈烈
- 微信公众平台所带来的互动式营销
- python字符串定界符_python字符串
- linux——Mplayer
- 我利用 ChatGPT 提高工作效率的 5 种方式
- 拖不得了,Android11真的要来了,最全适配实践指南奉上