题目:

给定一个排序好的数组,两个整数 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 已经被改变为一个整数数组(而不是整数列表)。 请重新加载代码定义以获取最新更改。

推荐解决方法:

    public List<Integer> findClosestElements(int[] arr, int k, int x) {List<Integer> res = new ArrayList();int start =0;int end = arr.length-1;while(end - start>=k){if(x-arr[start] > arr[end]-x){start++;}else{end--;}}for(int i=start;i<=end;i++){res.add(arr[i]);}return res;}

找一个区间,只需要找到左右两边的位置就可以了。

我的解决方法:

有点垃圾。。。

    public static List<Integer> findClosestElements(int[] arr, int k, int x) {int length = arr.length;int left = 0,right = length -1,mid;int mRecent = -1;while (left <= right){mid = (left + right) /2 ;int abs = Math.abs(arr[mid] - x);if (mRecent == -1){mRecent = mid;}if (abs <=  Math.abs(arr[mRecent] - x)){mRecent = mid;}if (arr[mid] == x) {mRecent = mid;break;}else if (x > arr[mid]){left = mid + 1;}else {right = mid -1;}}List<Integer> result = new ArrayList<>();result.add(arr[mRecent]);k--;int mleft = mRecent -1 ,mRight = mRecent +1;while (k >0){if (mleft >= 0 && mRight <=length-1){if (Math.abs(x-arr[mleft]) <=Math.abs(x-arr[mRight])) {result.add(0,arr [mleft]);mleft --;}else {result.add(arr[mRight]);mRight++;}}else if (mleft >=0){result.add(0,arr[mleft]);mleft --;}else {result.add(arr[mRight]);mRight++;}k--;}return result;}

算法----------找到 K 个最接近的元素相关推荐

  1. LeetCode题解:找到 K 个最接近的元素

    模版III - 找到 K 个最接近的元素(middle) 一.题目 LeetCode658.找到 K 个最接近的元素 给定一个排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两 ...

  2. LeetCode 658、找到 K 个最接近的元素

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

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

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

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

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

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

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

  6. LeetCode——658. 找到 K 个最接近的元素(双指针)

    文章目录 658. 找到 K 个最接近的元素(双指针) 题目 1.双指针法 思想:** 代码 2.二分法 思想:** 代码 658. 找到 K 个最接近的元素(双指针) 来源:力扣(LeetCode) ...

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

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

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

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

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

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

最新文章

  1. 选课微信小程序开发 java
  2. 设计模式基于C#的工程化实现及扩展
  3. SQL Tuning Advisor简单使用
  4. 房价增幅或于年底见顶
  5. 生物信息预测毒力因子
  6. Python实现图像的全景拼接
  7. Linux部署禅道在访问web页面进入www时报错:mysql无法连接(重新解压安装包或者输入命令:setenforce 0即可)
  8. 打字训练 my father1
  9. Git(分布式版本控制工具)
  10. (十)Scratch制作《贪吃蛇》,超详细
  11. 十六进制数据的CRC16校验码自写软件
  12. c语言实验求最小值,最小值c语言流程(C语言求最小值程序)
  13. 英雄联盟晋级赛时服务器维修,英雄联盟段位机制改动曝光,晋级赛被坑或将成为历史...
  14. Threejs实现3D场景浏览器内存消耗过高导致浏览器卡顿崩溃刷新等问题解决办法以及3D场景在手机浏览器中画质不高的原因
  15. IDC企业的运维一般要做哪些工作呢
  16. 盈利亚健康,我该怎么办?
  17. linux daemon命令用法,CentOS 6.8 使用start-stop-daemon命令
  18. HCNP路由交换学习指南--- 路由的基本概念
  19. 如何录制电脑屏幕并且生成视频
  20. 中国移动:中国5G产业发展与投资报告

热门文章

  1. 情绪调节的自适应_情绪定律:你的情绪决定你的一切
  2. matlab二维画图函数汇总--论文,数学建模中使用
  3. 记录一下自动白平衡与自动亮度
  4. vue 返回滚动条顶部组件_vue中回到顶部
  5. 如何给6个整数的一维数组某个元素赋值_数组指针详解
  6. MacOS系统下简单安装以及配置MongoDB数据库(一)
  7. Eclipse 3.5 Classic+Tomcat 6.0+MySql 5.5搭建java web开发环境
  8. 设计模式之强大的接口适配器模式,继承Thread or 实现Runnable?
  9. H.264的一些资料整理
  10. 学习ASP.NET比较完整的流程