计算一个大整数数组中任意两个数字之间的绝对最小差



我在Java程序中有一个很长的数组(30多万个未排序的整数(,需要计算数组中任意两个数字之间的最小绝对差,并将绝对差和相应的一对数字显示为输出。整个计算应该很快进行。

我有以下代码,通常可以工作:

private static void calcMinAbsDiff(int[] inputArray)
{
Arrays.sort(inputArray);
int minimum = Math.abs(inputArray[1] - inputArray[0]);
int firstElement = inputArray[0];
int secondElement = inputArray[1];
for (int i = 2; i < inputArray.length; i++)
{
if(Math.abs(inputArray[i] - inputArray[i-1]) < minimum)
{
minimum = Math.abs(inputArray[i] - inputArray[i-1]);
firstElement = inputArray[i-1];
secondElement = inputArray[i];
}
}
System.out.println("Minimum Absolute Difference : "+minimum);
System.out.println("Pair of Elements : ("+firstElement+", "+secondElement+")");
}

但是,我收到的输出都是0。我相信这是因为数组太长了。

如果数据集中有两个或多个零,并且没有负整数,则输出是预期的。排序后,inputArray[0]和inputArray[1]都为0,差值为0。没有其他相邻元素对的绝对差小于0,因此在算法结束时,最小值、第一元素和第二元素都将为0。

如果数据集中真的没有零,或者有负整数,那么可能会出现初始化问题。检查此线程:为什么我的简单数组只在java中打印零?

如果不是这样的话,那么我能想到的唯一一件事就是,您在以前的作用域中遇到了问题,导致数据被清零。

我会尝试在不同的点打印数据集的样本,看看它在哪里/什么时候被归零。

如果你仍然有问题,那么发布更多关于数据集和调用该函数的范围的信息,帮助我们了解发生了什么。让我们知道你是怎么做的!

最新更新