我试图实现的位置,其中的元素位于这些有最小的距离,他们之间?我有这个代码在java 11:
public class Main {
public static void main(String[] args) {
int [] arr= {5, 50, 3, 42, 18, 16, 8, 30, 44}; // Array
menorD l = new menorD();
menorD.MinD(arr);
}
}
public class menorD {
static int arr_zise;
public static void minD (int [] arr) {
arr_zise = arr.length;
int i, j;
int minD=0;
for(i=0;i<arr_zise; i++) {
for(j=0;j<arr_zise; j++) {
if(arr[i]!=arr[j]) {
minD=arr[i]-arr[j];
System.out.print(" i="+ arr[i]+ " j="+ arr[j]+ " minD es: "+Math.abs(min));
System.out.println();
}
}
}
}
}
我试着找到这个:
arr = {5, 50, 3, 42, 18, 16, 8, 30, 44}
我的Dmin将是它们之间具有较小距离的数字之间的差,在这种情况下,
Dmin1 = 5-3 = 2;
Dmin2 = 18-16 = 2;
Dmin3 44-42 = 2;
而不重复数组中数字的索引。我已经做了这个代码,但是我很难找到我要找的东西。
3条答案
按热度按时间wswtfjt71#
理想情况下,当处理逻辑分组在一起的数据时,应该抽象出一个类来封装它。在您的情况下,您希望跟踪每个可能的
distance
组合。每个Combination
应该跟踪:1.值的索引。
1.价值观本身。
1.距离。
1.哪个低哪个高。
其中,3和4可由1和2计算得出。
有了这样的数据结构(类),你就可以为每一种可能的组合构造对象了(当然不能重复--注意
j
是如何在i + 1
处 * 不定地 * 开始的,以避免重复可能的组合):然后使用
Combination
的List
,可以计算它们之间的最小距离:最后,您可以选择与之前计算的最小距离相匹配的组合:
关键是将
Combination
类抽象到它自己的封装类中,这样它就可以单独负责提供必要的API来检查特定的组合:索引、值、距离、高值、低值和偶数**String
**(toString
)表示。以下是此方法的完整演示,运行它可以获得一种感觉:
Complete code on GitHub
7kqas0il2#
我在网上找到的。你在做这个练习吗?
参考:https://www.geeksforgeeks.org/find-the-minimum-distance-between-two-numbers/
j1dl9f463#
在迭代for循环时,可以将
Integer
距离的Map
填充到索引Map<Integer,List<Integer>>
的List
(甚至是实际值,这取决于您的用例)。如果您总是将两个索引一起添加到List
,那么你就知道它们在List
中总是彼此相邻的,以便以后作为对来检索。然后只需要使用你的最小距离作为Map的关键来拉取相邻对的列表。请记住,如上所述,此列表将有重复项。