繁体   English   中英

二维数组中的非重复数字

[英]Non-repeating numbers in 2D array

我的代码有问题,我想在数组中找到不重复的数字,但我不知道怎么做!

1 2
3 4
1 4

例如在这种情况下,我希望 output 为 3 号和 2 号:

我用这段代码来获取数组,它就像一个矩阵

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 2; j++) {
        cam[i][j] = in.nextInt();
    }
}

类似这样的东西用于比较每个:

for (int i = 1; i <= 3; i++) {            
    if (cam[i][2] != cam[i+1][2]) {
        y = cam[i+1][2];
        break;
    }            
}

更新:整个代码在下面

int x=0,y=0;
int[][] cam = new int[10][10];

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 2; j++) {
        cam[i][j] = in.nextInt();
    }
}

for (int i = 1; i <= 3; i++) {          
    if (cam[i][1] != cam[i+1][1]) {
        x = cam[i+1][1];
        break;
}

for (int i = 1; i <= 3; i++) {            
    if (cam[i][2] != cam[i+1][2]) {
        y = cam[i+1][2];
        break;
    }            
}

System.out.println(x+" "+y);

假设您的代码仅在第 1 列和第 2 列中查看(第 0 列中是否还有其他数据?):

for (int i = 1; i <= 3; i++) {
    found = false;
    for (int i1 = i + 1; i1 <= 3; i1++) {
        if (cam[i][1] == cam[i1][1]) {
            found = true;
            break;
        }
    }
    if (!found) {
        x = cam[i][1];
    }
}
for (int i = 1; i <= 3; i++) {
    found = false;
    for (int i1 = i + 1; i1 <= 3; i1++) {
        if (cam[i][2] == cam[i1][2]) {
            found = true;
            break;
        }
    }
    if (!found) {
        y = cam[i][2];
    }
}

数组索引为 0, 1, 2, ..., length-1。

for (int i = 0; i < cam.length; i++) {
    for (int j = 0; j <= cam[i].length; j++) {
        cam[i][j] = in.nextInt();
    }
}

搜索代码:

for (int i = 0; i < cam.length; i++) {
    for (int j = 0; j <= cam[i].length; j++) {
        int valueAtIJ = cam[i][j];
        boolean found = false;
        ... walk here through cam using valueAtIJ, set found, skip i, j.
        if (!found) {
            ...
        }
    }
}

如果您的课程中已经处理了 Set/Map,则有更智能的解决方案。 而且这种for-i2-for-j2循环也可以优化。

您可以从此二维数组中collect重复项的 map,然后遍历此 map 并对非重复元素应用filter

int[][] arr = {
        {1, 2},
        {3, 4},
        {1, 4}};

Map<Integer, Long> map = Arrays.stream(arr)
        .flatMapToInt(Arrays::stream).boxed()
        .collect(Collectors.groupingBy(
                Integer::intValue, Collectors.counting()));

System.out.println(map); // {1=2, 2=1, 3=1, 4=2}

int[] arr2 = map.entrySet().stream()
        .filter(e -> e.getValue() == 1)
        .mapToInt(Map.Entry::getKey)
        .toArray();

System.out.println(Arrays.toString(arr2)); // [2, 3]

另请参阅:如何有效地查找数组中的重复元素?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM