gpt4 book ai didi

Java:在数组中搜索最接近的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:33:18 25 4
gpt4 key购买 nike

我有一个大维度的有序 double 组,例如:

[2.1,3.4,3.6,4.1]

现在我以某种方式生成双数,例如:

3.51

我需要在 Java 中创建一个函数来获取数组和数字,并给我该数字数组中最接近的值。在这个例子中 3.6.

我怎样才能以最有效的方式做到这一点?因为我可以有 300000 个 double 数组并且需要经常执行此操作。那我就没法做简单的比较了。

编辑:我做了这个,在一些测试中结果是正确的,对于你是正确的?

        int pos = Arrays.binarySearch(allTime.times, value);
double out;

if(pos >= 0)
{
// System.out.println(allTime.times[pos]);
out = allTime.times[pos];
}
else if(pos == -1)
{
// System.out.println(allTime.times[0]);
out = allTime.times[0];
}
else
{
int insertionPoint = -pos-1;
if(insertionPoint < allTime.times.length)
{
if(allTime.times[insertionPoint] - value < value - allTime.times[insertionPoint-1])
// System.out.println(allTime.times[insertionPoint] );
out = allTime.times[insertionPoint];
else
// System.out.println(allTime.times[insertionPoint-1] );
out = allTime.times[insertionPoint-1];
}
else
// System.out.println(allTime.times[allTime.times.length -1]);
out = allTime.times[allTime.times.length -1];
}

最佳答案

Arrays.binarySearch 也适用于不包含在数组中的元素。

int pos = Arrays.binarySearch(arr, value);

如果不包含该值,它会返回一个负值,它描述了该值的位置:(-(insertion point) - 1)

然后找出两个邻居值中哪个是正确的。

if(pos < 0)
{
int insertionPoint = -pos-1;
if(insertionPoint == arr.length) //value is bigger than every value in array
//arr[insertionPoint-1] is the nearest value
else if(insertionPoint == 0) //value is smaller than every value in array
//arr[0] is the nearest value
else if(value-arr[insertionPoint-1] < arr[insertionPoint]-value)
//arr[insertionPoint-1] is the nearest value
else
//arr[insertionPoint] is the nearest value
}else
//arr[pos] has the same value

索引 insertPoint 处的值大于 value。我还处理了值包含在数组中的情况。

关于Java:在数组中搜索最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24710756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com