我有一个大尺寸的有序双精度数组,例如:
[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];
}
Jimmy T的答案没有处理特殊情况,例如搜索数是否在第0个索引之前,或者是否超出了最后一个索引。
这是更正的一个
double searchNearest(double[] array, double searchNumber) {
int pos = Arrays.binarySearch(array, searchNumber);
if (pos >= 0)
return searchNumber;
else {
int insertionPoint = -pos - 1;
if (insertionPoint > 0 && insertionPoint < array.length) {
if ((searchNumber - array[insertionPoint - 1]) < (array[insertionPoint] - searchNumber)) {
return array[insertionPoint - 1];
} else {
return array[insertionPoint];
}
} else {
return insertionPoint == 0 ? array[0] : array[array.length - 1];
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句