我正在解决here
中的最近点问题问题陈述:
我们在平面上给出了一个n个点的数组,问题是要找出数组中最近的一对点。
INPUT:输入将是两个数组X和Y,X []存储x坐标,Y []存储y坐标。
输出:最小距离。
我的算法:
注意:方法仅适用于正坐标。
查找(0,0)中所有坐标之间的距离,并将其存储在距离数组中。
在上一步计算的Sort Distance数组。
通过计算距离数组中两个连续值之间的差异来找到最小距离。
代码:
public class ClosestPoint {
int x[]={2,12,40,5,12,3},y[]={3,30,50,1,10,4}; // x and y coordinates
float distance[] = {0,0,0,0,0,0}; // distance
void calculateDis(){
for(int i=0;i<x.length;i++){
int dis=(x[i]*x[i] + y[i]*y[i]);
distance[i]= (float)Math.sqrt(dis);
}
}
float findClosest() {
float closest = Float.MAX_VALUE;
for(int i=0;i<distance.length-1;i++) {
float pairDis= distance[i+1]-distance[i];
if(closest>pairDis) {
closest =pairDis;
}
}
return closest;
}
public static void main(String arg[]) {
ClosestPoint p =new ClosestPoint();
p.calculateDis(); // calculate distance from 0,0.
Arrays.sort(p.distance);
System.out.println(p.findClosest());
}
}
正确答案: 1.4
我的回答: 0.099
我没有得到正确答案。有人可以指出我的方法存在缺陷。
感谢。