搜索值与N-Java最接近的数组的索引
有没有人能提供一些建议,告诉您如何在不使用API类的情况下搜索无序数组中与N最接近的值?我不希望我的算法是线性时间 一种方法是对数组排序,然后进行二进制切分搜索吗搜索值与N-Java最接近的数组的索引,java,search,Java,Search,有没有人能提供一些建议,告诉您如何在不使用API类的情况下搜索无序数组中与N最接近的值?我不希望我的算法是线性时间 一种方法是对数组排序,然后进行二进制切分搜索吗 有没有更有效的方法来实现这一点?如果有任何集合未排序,您就无法真正“猜测”元素将位于何处,并且复杂性始终是线性的 数组可能不是您的最佳选择-您可能希望使用TreeSet,它提供了lower()和higher()方法,从NavigableSet接口,这些方法具有对数复杂性。但是,请注意,它不会包含重复的元素,但我认为它应该适合您需要的内
有没有更有效的方法来实现这一点?如果有任何集合未排序,您就无法真正“猜测”元素将位于何处,并且复杂性始终是线性的
数组可能不是您的最佳选择-您可能希望使用
TreeSet
,它提供了lower()
和higher()
方法,从NavigableSet
接口,这些方法具有对数复杂性。但是,请注意,它不会包含重复的元素,但我认为它应该适合您需要的内容。正如@ThomasPastircak所写的,如果您的阵列未排序,您将无法获得比线性时间更好的性能
将数组中的数据插入到另一个数据结构中至少会有线性复杂度(因为数组中的所有元素都需要插入到该结构中),对其进行排序也会比线性复杂度更差
您的问题与“如何在未排序的数组中搜索最大/最小数”的问题没有太大区别。您只是在搜索与参考值N的最小差值
一个简单的解决方案是:
public static int closest(double[] array, double n) {
double leastDifference = Double.POSITIVE_INFINITY;
int indexOfLeastDifference = -1;
for (int a = 0; a < array.length; a++) {
double difference = Math.abs(array[a] - n);
if (difference < leastDifference) {
indexOfLeastDifference = a;
leastDifference = difference;
}
}
return indexOfLeastDifference;
}
公共静态int最近(双[]数组,双n){
double leastDifference=double.正无穷大;
int indexoflestdifference=-1;
for(int a=0;a