给出一个未排序的整数列表,找到一对它们之间的绝对差最小的元素。如果有多对,则全部找到。
我的理由是将arr[j] - arr[i]
与lowest
进行比较,如果该值小于或等于该值,则将该值添加到最低的数组中,但不起作用。
代码:
static int[] closestNumbers(int[] arr) {
int lowest = arr[1] - arr[0];
int lowestArray[] = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (Math.abs(arr[j] - arr[i]) < lowest) {
lowest = Math.abs(arr[j] - arr[i]);
}
}
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] == lowest) {
lowestArray[i] = arr[i];
}
}
return lowestArray;
}
答案 0 :(得分:1)
问题是,当您像这样初始化最低的数组时,
int[] lowest = new int[arr.length];
您实际上是用零初始化的。另外,无论何时使用arr [j] -arr [i],它总是大于或等于零(因为数组以升序排序),导致错误的结果,因为以下if语句>
if(Math.abs(arr[j] - arr[i]) <= lowest[l]) {
lowest[l] = Math.abs(arr[j] - arr[i]);
}
永远不会执行大于0的差异。
像这样初始化最低的数组,
for(int i=0;i<lowest.length;i++){
lowest[i] = Integer.MAX_VALUE;
}
另外,您的i变量的外循环以i = 1开头,但应以i = 0开头
答案 1 :(得分:1)
下面是必需的代码:-
import java.util.*;
class GFG
{
// Returns minimum difference between
// any two pair in arr[0..n-1]
static void printMinDiffPairs(int arr[], int n)
{
if (n <= 1)
return;
// Sort array elements
Arrays.sort(arr);
// Compare differences of adjacent
// pairs to find the minimum difference.
int minDiff = arr[1] - arr[0];
for (int i = 2; i < n; i++)
minDiff = Math.min(minDiff, arr[i] - arr[i-1]);
// Traverse array again and print all pairs
// with difference as minDiff.
for ( int i = 1; i < n; i++)
{
if ((arr[i] - arr[i-1]) == minDiff)
{
System.out.print("(" + arr[i-1] + ", "
+ arr[i] + ")," );
}
}
}
// Driver code
public static void main (String[] args)
{
int arr[] = {5, 3, 2, 4, 1};
int n = arr.length;
printMinDiffPairs(arr, n);
}
}
以上程序可以处理重复项吗?
上述程序无法处理{x,x,x}之类的情况。在这种情况下,预期输出(x,x),(x,x),(x,x),但在程序上方会打印(x,x),(x,x)
答案 2 :(得分:0)
static int[] closestNumbers(int[] arr) {
int minAbs = Integer.MAX_VALUE;
Arrays.sort(arr);
int[] out = new int[(arr.length) + 3];
int j = 0;
for (int i = 1; i < arr.length; i++) {
minAbs = Math.min(minAbs, Math.abs(arr[i] - arr[i - 1]));
}
for (int i = 1; i < arr.length; i++) {
if(minAbs ==Math.abs(arr[i] - arr[i - 1])) {
out[j++]=arr[i - 1];
out[j++]=arr[i];
}
}
int[] tem= new int[j];
for(int i=0; i<j;i++) {
tem[i]=out[i];
}
return tem;
}