2020-03-10
找到 K 个最接近的元素
给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之
差最小)的 k 个数。返回的结果必须要是按升序排好的。如果有两个数与 x
的差值一样,优先选择数值较小的那个数。
说明:
  • k 的值为正数,且总是小于给定排序数组的长度。
  • 数组不为空,且长度不超过 10^4。
  • 数组里的每个元素与 x 的绝对值不超过 10^4。
示例:
输入: [1,2,3,4,5], k=4, x=3
输出: [1,2,3,4]
输入: [1,2,3,4,5], k=4, x=-1
输出: [1,2,3,4]

题解:
思路1: 二分查找 + 双指针
先用二分查找找到与X最接近的下标i, 再从i往前后截取k成为新数组
再用双指针在最前最后判断去掉差值更大的那一边直到数组长度等于K
 
var findClosestElements = function (arr, k, x) {
const getIndex = (arr, x) => { // 二分查找找到最接近的i
let l = 0;
let r = arr.length - 1;
let mid, i = -1;
while (l < r) {
mid = Math.floor((l + r) / 2);
if (arr[mid] === x) {
i = mid;
break;
}
if (arr[mid] < x) l = mid + 1;
if (arr[mid] > x) r = mid;
}
i = i > -1 ? i : l;
return i;
} const i = getIndex(arr, x);
arr = arr.slice(Math.max(i - k, 0), Math.min(i + k, arr.length)); // 从i开始向前后截取k
while (arr.length > k) { // 双指针删除差值更大的那一边
if ((x - arr[0]) <= (arr[arr.length - 1] - x)) {
arr.splice(arr.length - 1, 1);
} else {
arr.splice(0, 1);
}
}
return arr;
}

658.找到K个最接近的元素的更多相关文章

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

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

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

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

  3. leetcode 658找到k个最接近的元素

    class Solution { public: vector<int> findClosestElements(vector<int>& arr, int k, in ...

  4. [Swift]LeetCode658. 找到 K 个最接近的元素 | Find K Closest Elements

    Given a sorted array, two integers k and x, find the kclosest elements to x in the array. The result ...

  5. 转:Jquery的parent和parents(找到某一特定的祖先元素)

    Jquery的parent和parents(找到某一特定的祖先元素) 关于Jquery的parent和parents parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合.parents则 ...

  6. [LeetCode] 658. Find K Closest Elements 寻找K个最近元素

    Given a sorted array, two integers k and x, find the k closest elements to x in the array. The resul ...

  7. [leetcode]658. Find K Closest Elements绝对距离最近的K个元素

    Given a sorted array, two integers k and x, find the k closest elements to x in the array. The resul ...

  8. Jquery的parent和parents(找到某一特定的祖先元素)

    关于Jquery的parent和parents parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合.parents则是取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素).可以 ...

  9. LeetCode 448. Find All Numbers Disappeared in an Array找到所有数组中消失的元素

    题目 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能 ...

随机推荐

  1. flask之jinjia2模板语言

    flask_jinjia2.py ''' flask中的jinjia2模板语言(和django中模板类似): (1)模板变量{{ }} (2)模板标签{% %} ①for循环遍历 {% for foo ...

  2. xctf-misc 新手区 wp

    目录 this_is_flag pdf SimpalRAR ext3 stegano this_is_flag Most flags are in the form flag{xxx}, for ex ...

  3. python3.x 基础三:装饰器

    装饰器:本质是函数,用于装饰其他函数,在不改变其他函数的调用和代码的前提下,增加新功能 原则: 1.不能修改被装饰函数的源代码 2.不能修改被装饰函数的调用方式 3.装饰函数对于被装饰函数透明 参考如 ...

  4. 【JVM】GC 可达性分析中哪些算是GC ROOT?

    至今为止,我基本上发现网上没有几个博客说的很明白的,今天我在这里斗胆总结一下,各位大佬,如有错误,还望指责 ^ _ ^ 首先那肯定还得是看看概念了,在JVM中,什么可以作为GC Root呢? 虚拟机栈 ...

  5. sql语句中的删除操作

    drop: drop table tb; 删除内容和定义,释放空间.简单来说就是把整个表去掉.以后不能再新增数据,除非新增一个表. truncate: truncate table tb; 删除内容. ...

  6. 大O符号初学者指南

    原文地址:https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/ 计算机科学中,大O表示法被用来描述一个算法的性能或复杂度. ...

  7. Python 每日一练(4)

    引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...

  8. Linux下db2V10.5命令行安装超详细图文教程(附下载地址)

    下载地址:https://pan.baidu.com/s/1GtF03x1FMF3IsGdSiBJu-g 提取码:8vfj 失效了发邮件:wells974@163.com 一.db2prereqche ...

  9. cocos2dx 入门 环境配置

    本人立志走游戏开发这条路,很早之前就准备学习cocos2dx,今天终于忙里偷闲入了一下门,把环境配置好了,创建了自己的第一个cocos项目! 一.环境配置 1.下载cocos https://coco ...

  10. pycharm关联git

    一.先创建SSH Key 给github设置SSH-KEY !!! 这一步算是连接GitHub的最基本的一步了,git是分布式的代码管理工具,远程的代码管理是基于ssh的,所以得先配好SSH key. ...