1.4.16最接近的一对(一维)。编写一个程序,给定一个含有N个double值的数组a[],在其中找到一对最接近的值:两者之差(绝对值)最小的两个数。程序在最坏情况下所需的运行时间应该是线性对数级别的。
答:一个简单的实现,不 考虑多对最近点。
import java.util.Arrays;
public class TheNearest
{
public static int nearset(double[] a)
{
Arrays.sort(a);
double dist=Math.abs(a[a.length-1]);
double dist2;
int nearsetIndex=-1;
for(int i=0;i<a.length-1;i++)
{
dist2=Math.abs(a[i]-a[i+1]);
if (dist2<dist)
{
dist=dist2;
nearsetIndex=i;
}
}//end for
return nearsetIndex;
}
public static void main(String[] args)
{
double[] a=In.readDoubles(args[0]);
int i=nearset(a);
StdOut.printf("%d,%d",i,i+1);
}
}
答:一个简单的实现,不 考虑多对最近点。
import java.util.Arrays;
public class TheNearest
{
public static int nearset(double[] a)
{
Arrays.sort(a);
double dist=Math.abs(a[a.length-1]);
double dist2;
int nearsetIndex=-1;
for(int i=0;i<a.length-1;i++)
{
dist2=Math.abs(a[i]-a[i+1]);
if (dist2<dist)
{
dist=dist2;
nearsetIndex=i;
}
}//end for
return nearsetIndex;
}
public static void main(String[] args)
{
double[] a=In.readDoubles(args[0]);
int i=nearset(a);
StdOut.printf("%d,%d",i,i+1);
}
}