题目描述
牛牛最近搬到了一座新的城镇,这个城镇可以看成是一个一维的坐标系。城镇上有n个居民,第i个居民的位置为ai。现在牛牛有m个搬家方案,在第i个方案中他会搬到位置xi。
俗话说的好,远亲不如近邻。现在牛牛想知道,对于每个搬家方案,搬家后与最近的居民的距离为多少。
示例1
输入
3,2,[2,4,7],[5,8]
输出
[1,1]
说明
第一个方案搬到位置5,与5最近的居民在位置4,距离为1.
第二个方案搬到位置8,与8最近的居民在位置7,距离为1
备注:
1≤n,m≤100000,0≤∣ai∣,∣xi∣≤1e9
第一个参数为int型变量,代表居民个数n
第二个参数为int型变量,代表方案个数m
第三个参数为vector,包含n个元素代表n个居民的位置
第四个参数为vector,包含m个元素代表m个方案对应的位置
思路:二分法查找,每一次更新最小距离
class Solution {
public:
vector<int> solve(int n, int m, vector<int>& a, vector<int>& x) {
vector<int> help;
sort(a.begin(),a.end());
for(int i=0;i<m;++i){
int l=0,r=n-1;
int d=INT_MAX;
while(l<=r){
int mid=l+(r-l)/2;
if(abs(a[mid]-x[i])<d){
d=abs(a[mid]-x[i]);//更新最小值
}
if(a[mid]==x[i])//二分法缩小查找范围
break;
else if(a[mid]<x[i])
l=mid+1;
else
r=mid-1;
}
help.push_back(d);
}
return help;
}
};