文章目录

  • 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 个最接近的元素(双指针)相关推荐

  1. leetcode 658. 找到 K 个最接近的元素

    leetcode 658. 找到 K 个最接近的元素 题目描述: 给定一个排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排 ...

  2. Java实现 LeetCode 658 找到 K 个最接近的元素(暴力)

    658. 找到 K 个最接近的元素 给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的.如果有两个数与 x 的差值一样,优先 ...

  3. LeetCode 658. 找到 K 个最接近的元素(二分查找)

    1. 题目 给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的.如果有两个数与 x 的差值一样,优先选择数值较小的那个数. ...

  4. 【LeetCode通关全记录】658. 找到 K 个最接近的元素

    [LeetCode通关全记录]658. 找到 K 个最接近的元素 题目地址

  5. LeetCode 每日一题——658. 找到 K 个最接近的元素

    1.题目描述 658. 找到 K 个最接近的元素 给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的. 整数 ...

  6. 【658. 找到 K 个最接近的元素】

    来源:力扣(LeetCode) 描述:    给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的. 整数 a ...

  7. 658. 找到 K 个最接近的元素

    给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的. 整数 a 比整数 b 更接近 x 需要满足: |a - ...

  8. leetcode 658. Find K Closest Elements | 658. 找到 K 个最接近的元素(二分查找+双指针)

    题目 https://leetcode.com/problems/find-k-closest-elements/ 题解 在arr中找到第一个小于等于x的位置mid,然后再根据题意,用双指针分别向左. ...

  9. 【LeetCode Python实现】658. 找到 K 个最接近的元素(中等)

    文章目录 题目描述 示例 1: 示例 2: 提示: 参考代码 题目描述 给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要 ...

最新文章

  1. nginx是什么,如何使用
  2. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 权限申请原理对话框操作回调接口 | 永久拒绝权限后引导设用户置权限 )
  3. HTML学习03之列表,表格,媒体元素
  4. ERROR Cannot determine the location of the VS Common Tools Folder
  5. HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面...
  6. 深度学习之 BP 算法
  7. 刀塔传奇公会管理系统 ------ Python界面访问Pgsql
  8. 写给非网工的CCNA教程(4)聊聊ping命令后的原理(续)
  9. Windows环境下JDK安装与环境变量配置
  10. 互联网网站采集工具大比拼和选择指南
  11. 手机双拼输入法下的智能纠错
  12. Druid连接池原理
  13. 马克思主义基本原理概论
  14. bzoj5145 [Ynoi2018]未来日记 (多校第4场1013 Yuno and Claris)
  15. clickhouse-client命令行参数及常用案例
  16. Showwindow 及参数
  17. python中close函数的用法_skft包 pythonpython close()是什么?python close()定义及用法详解...
  18. python在煤矿的用途-息烽高校邦数据科学通识课【Python爬虫】答案
  19. java深拷贝的三种方式
  20. 讯飞智能语音鼠标G50:AI语音、转写翻译、记录截图一键搞定!

热门文章

  1. 计算机配件的选购标准,计算机配置方案与配件选购
  2. Liblinear机器学习库教程详解(基于Python API)
  3. RuntimeError: populate() isn‘t reentrant
  4. Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数
  5. 连续三年缩招,北交电信竞争愈演愈烈
  6. 微信公众平台所带来的互动式营销
  7. python字符串定界符_python字符串
  8. linux——Mplayer
  9. 我利用 ChatGPT 提高工作效率的 5 种方式
  10. 拖不得了,Android11真的要来了,最全适配实践指南奉上