Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索值与N-Java最接近的数组的索引_Java_Search - Fatal编程技术网

搜索值与N-Java最接近的数组的索引

搜索值与N-Java最接近的数组的索引,java,search,Java,Search,有没有人能提供一些建议,告诉您如何在不使用API类的情况下搜索无序数组中与N最接近的值?我不希望我的算法是线性时间 一种方法是对数组排序,然后进行二进制切分搜索吗 有没有更有效的方法来实现这一点?如果有任何集合未排序,您就无法真正“猜测”元素将位于何处,并且复杂性始终是线性的 数组可能不是您的最佳选择-您可能希望使用TreeSet,它提供了lower()和higher()方法,从NavigableSet接口,这些方法具有对数复杂性。但是,请注意,它不会包含重复的元素,但我认为它应该适合您需要的内

有没有人能提供一些建议,告诉您如何在不使用API类的情况下搜索无序数组中与N最接近的值?我不希望我的算法是线性时间

一种方法是对数组排序,然后进行二进制切分搜索吗


有没有更有效的方法来实现这一点?

如果有任何集合未排序,您就无法真正“猜测”元素将位于何处,并且复杂性始终是线性的


数组可能不是您的最佳选择-您可能希望使用
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