链接:牛客网NC33
题意、输入、输出:
分析:有序的画,可以对于每个位置在a中查找,取两端最小值
思路:排序后对于每一个xi二分查找,取两端相减绝对值,因为可能不在0-n-1指示的ai最值内,也可对于不在的情况特殊分析。
代码:
import java.util.*;
public class Solution {
/**
* 远亲不如近邻
* @param n int整型 居民个数
* @param m int整型 方案个数
* @param a int整型一维数组 居民的位置
* @param x int整型一维数组 方案对应的位置
* @return int整型一维数组
*/
public int[] solve (int n, int m, int[] a, int[] x) {
// write code here
Arrays.sort(a,0,n);
int[] ans=new int[m];
for(int i=0;i<m;i++){
int l=0,r=n-1;
while(l+1<r){
int mid=(l+r)>>1;
if(a[mid]<=x[i])l=mid;
else r=mid;
}
ans[i]=Math.min(Math.abs(x[i]-a[l]),Math.abs(a[r]-x[i]));
}
return ans;
}
}