博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(双指针、二分Binary Search) leetcode 658. Find K closest Elements
阅读量:5069 次
发布时间:2019-06-12

本文共 1790 字,大约阅读时间需要 5 分钟。

题意:给定一个升序排列的数组,找到k个与x最相近的元素(即差值最小),返回的结果必须要是按升序排好的。如果有两个数与 x的差值一样,优先选择数值较小的那个数。

 

解法一:双指针(排除法),一个一个删,因为是有序数组,且返回的是连续升序子数组,所以每一次删除的元素一定是位于边界;如果数组含有共 7 个元素,要保留 3 个元素,因此要删除 4 个元素(arr.size()-k);因为要删除的元素都位于边界,于是可以使用双指针(左指针指向数组的第一个元素,右指针指向数组最后一个元素)对撞的方式确定保留区间。

将需要删除的元素个数作为循环的条件,当right指向的元素减去x 大于或等于 left指向的元素减去x 的距离时,说明left指向的元素更接近x,故将right-1。(因为如果有两个数与 x的差值一样,优先选择数值较小的那个数)所以等于也是将right-1; 否则 left+1。

class Solution {public:    vector
findClosestElements(vector
& arr, int k, int x) { int size = arr.size(), n = size-k; int left = 0, right = size-1; while(n){ if(x - arr[left] <= arr[right] - x) right--; else left++; n--; } vector
a;// for(int i=left; i<=right; ++i)// a.push_back(arr[i]); a.assign(arr.begin()+left, arr.begin()+right+1); return a; }};

解法二: Binary Search

 

 

这道题的Binary Search 真的不好想 :(   下面是我整理的解题思路,参考了很多大神的思路(链接如下),突然发现二分搜索有好多变种啊,搞得我有点晕晕的。

 我用的两个二分搜索模板:

对应的讲解视频:https://www.bilibili.com/video/av41422769

二分搜索github的总结贴:

二分搜索的总结博客:

youtube上讲解这道题用二分搜索的视频:

 

 

 

class Solution {public:    vector
findClosestElements(vector
& arr, int k, int x) { int left = 0, right = arr.size()-k; while(left< right){ int mid = left + (right-left)/2; if(x> arr[mid]){ if(x-arr[mid] > arr[mid+k]-x) left = mid+1; else right = mid; } else right = mid; } return vector
(arr.begin()+left, arr.begin()+left+k); }};

 

转载于:https://www.cnblogs.com/Bella2017/p/11223088.html

你可能感兴趣的文章
在WPF中使用Caliburn.Micro搭建MEF插件化开发框架
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF程序加入3D模型
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
android访问链接时候报java.net.MalformedURLException: Protocol not found
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
虚拟中没有eth0
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
IOS-图片操作集合
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
泛型第23条:请不要在新代码中使用原生态类型
查看>>
团队项目开发客户端——登录子系统的设计
查看>>
【AppScan心得】IBM Rational AppScan 无法记录登录序列
查看>>
[翻译] USING GIT IN XCODE [4] 在XCODE中使用GIT[4]
查看>>
简化通知中心的使用
查看>>