嵌套 for 循环以比较对
Nested for loop to compare pairs
我的 java 项目在这里有一个小问题,我将其简化为以下代码。
我的代码打印出来:
索引 0 和 1 指向相同的值。
索引 1 和 0 指向相同的值。
索引 3 和 4 指向相同的值。
索引 4 和 3 指向相同的值。
但我想要的是:
索引 0 和 1 指向相同的值。
索引 3 和 4 指向相同的值。
因为 0 和 1,1 和 0 真的是一对,有什么建议吗?
int[] arr={4,4,5,6,6,};
for(int n=0; n<arr.length; n++)
{
for(int m=0; m<arr.length; m++)
{
if(arr[n]==arr[m] && n!=m)
{
System.out.println("Index "+n+" and "+m+" are pointing to same value.");
}
}
}
如果你想过滤掉重复的,
将 for(int m=0; m<arr.length; m++)
更改为 for(int m=n+1; m<arr.length; m++)
试试这个。
int[] arr = {4,4,5,6,6,};
for(int n=0; n<arr.length; n++)
{
for(int m=0; m<arr.length; m++)
{
if(arr[n]==arr[m] && n!=m && m > n || n == 0 && m == 0)
{
System.out.println("Index "+n+" and "+m+" are pointing to same value.");
}
}
}
解分解递归回想等问题时可以尝试学习一些解题技巧
https://www.youtube.com/watch?v=S47aSEqm_0I
讲座能教你很多。
int[] arr={4,4,5,6,6,};
for(int n=0; n<arr.length; n++)
{
for(int m=n; m<arr.length; m++)
{
if(arr[n]==arr[m] && n!=m)
{
System.out.println("Index "+n+" and "+m+" are pointing to same value.");
}
}
}
int[] arr={4,4,5,6,6,};
for (int n = 0; n < arr.length; n++) {
for (int m = 0; m < arr.length; m++) {
if (arr[n] == arr[m] && n != m) {
if (m > 0 && n + 1 < arr.length) {
System.out.println("Index " + n + " and " + m + " are pointing to same value.");
}
}
}
}
您可以使用哈希映射来提高速度。
int[] arr = {4, 4, 5, 6, 6,};
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
int num = arr[i];
if (map.containsKey(num)) {
System.out.println("Index " + map.get(num) + " and " + i + " are pointing to same value.");
map.remove(num);
} else
map.put(arr[i], i);
}
我的 java 项目在这里有一个小问题,我将其简化为以下代码。 我的代码打印出来:
索引 0 和 1 指向相同的值。 索引 1 和 0 指向相同的值。 索引 3 和 4 指向相同的值。 索引 4 和 3 指向相同的值。
但我想要的是:
索引 0 和 1 指向相同的值。 索引 3 和 4 指向相同的值。
因为 0 和 1,1 和 0 真的是一对,有什么建议吗?
int[] arr={4,4,5,6,6,};
for(int n=0; n<arr.length; n++)
{
for(int m=0; m<arr.length; m++)
{
if(arr[n]==arr[m] && n!=m)
{
System.out.println("Index "+n+" and "+m+" are pointing to same value.");
}
}
}
如果你想过滤掉重复的,
将 for(int m=0; m<arr.length; m++)
更改为 for(int m=n+1; m<arr.length; m++)
试试这个。
int[] arr = {4,4,5,6,6,};
for(int n=0; n<arr.length; n++)
{
for(int m=0; m<arr.length; m++)
{
if(arr[n]==arr[m] && n!=m && m > n || n == 0 && m == 0)
{
System.out.println("Index "+n+" and "+m+" are pointing to same value.");
}
}
}
解分解递归回想等问题时可以尝试学习一些解题技巧
https://www.youtube.com/watch?v=S47aSEqm_0I
讲座能教你很多。
int[] arr={4,4,5,6,6,};
for(int n=0; n<arr.length; n++)
{
for(int m=n; m<arr.length; m++)
{
if(arr[n]==arr[m] && n!=m)
{
System.out.println("Index "+n+" and "+m+" are pointing to same value.");
}
}
}
int[] arr={4,4,5,6,6,};
for (int n = 0; n < arr.length; n++) {
for (int m = 0; m < arr.length; m++) {
if (arr[n] == arr[m] && n != m) {
if (m > 0 && n + 1 < arr.length) {
System.out.println("Index " + n + " and " + m + " are pointing to same value.");
}
}
}
}
您可以使用哈希映射来提高速度。
int[] arr = {4, 4, 5, 6, 6,};
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
int num = arr[i];
if (map.containsKey(num)) {
System.out.println("Index " + map.get(num) + " and " + i + " are pointing to same value.");
map.remove(num);
} else
map.put(arr[i], i);
}