如何找出两个二维数组的差集?详细方法请看这里!

44 min read

以下是Java语言的一个示例方法,用于找到两个二维整数数组的差集:

public static int[][] arrayDifference(int[][] arr1, int[][] arr2) {
    // 创建一个新的二维数组,用于存储差集的结果
    int[][] diff = new int[arr1.length][arr1[0].length];
    int count = 0;
    
    // 遍历第一个数组的每一个元素,如果不在第二个数组中出现,就进行记录
    for(int i=0; i<arr1.length; i++) {
        for(int j=0; j<arr1[0].length; j++) {
            boolean found = false;
            for(int m=0; m<arr2.length; m++) {
                for(int n=0; n<arr2[0].length; n++) {
                    if(arr1[i][j] == arr2[m][n]) {
                        found = true;
                        break;
                    }
                }
                if(found) {
                    break;
                }
            }
            if(!found) {
                diff[i][j] = arr1[i][j];
                count++;
            }
        }
    }

    // 如果没有差集,返回空数组
    if(count == 0) {
        return new int[0][0];
    }
    
    // 去除差集中的0元素,返回真实的差集数组
    int[][] result = new int[count][2];
    int index = 0;
    for(int i=0; i<diff.length; i++) {
        for(int j=0; j<diff[0].length; j++) {
            if(diff[i][j] != 0) {
                result[index][0] = i;
                result[index][1] = j;
                index++;
            }
        }
    }
    return result;
}

这个方法会返回一个二维数组,其中每个元素表示在第一个数组中出现但是在第二个数组中没有出现的位置(以行和列的形式表示)。例如,如果调用arrayDifference(arr1, arr2),其中arr1和arr2是以下两个数组:

arr1 = [
    [1, 2, 3],
    [4, 5, 6]
]

arr2 = [
    [1, 3, 5],
    [2, 4, 6]
]

那么这个方法将返回[[0, 1], [0, 2], [1, 0], [1, 1], [1, 2]],这个结果表示arr1中的这些位置(1, 2, 3, 4, 5, 6)在arr2中没有出现。