c++实现---远亲不如近邻

题目描述
牛牛最近搬到了一座新的城镇,这个城镇可以看成是一个一维的坐标系。城镇上有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;
    }
};

猜你喜欢

转载自blog.csdn.net/Fizz6018/article/details/107327593