You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多维交错数组唯一公共元素提取问题及Java代码优化求助

解决多维交错数组公共元素去重打印问题

你当前的代码会重复打印公共元素,核心问题是没对数组1中的重复元素做去重处理——数组1里同一个元素出现几次,就会触发几次检查和打印逻辑,导致重复输出。

用Java的Set集合可以轻松解决这个问题,因为Set天然不允许重复元素,刚好适配“每个公共元素仅打印一次”的需求,下面提供两种可行方案:

方案一:双Set高效处理(推荐)

先把数组2的所有元素存入Set用于快速查找,再把数组1的元素去重后,逐一检查是否存在于数组2的Set中,存在则打印。这种方法时间效率更高,适合元素较多的场景。

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class CommonElements {
    public static void main(String[] args) {
        int[][] arr1 = new int[][]{{1, 2, 1}, {9, 7, 2}, {7, 3, 6}};
        int[][] arr2 = new int[][]{{2, 6, 8}, {0, 1, 7}, {7, 2, 0}, {8, 3}};

        System.out.println("Input 1:");
        for (int[] subArr : arr1) {
            System.out.println(Arrays.toString(subArr));
        }
        System.out.println("Input 2:");
        for (int[] subArr : arr2) {
            System.out.println(Arrays.toString(subArr));
        }

        // 把数组2的所有元素存入Set,实现O(1)快速查找
        Set<Integer> arr2Elements = new HashSet<>();
        for (int[] subArr : arr2) {
            for (int num : subArr) {
                arr2Elements.add(num);
            }
        }

        // 把数组1的元素去重,存入另一个Set
        Set<Integer> uniqueArr1Elements = new HashSet<>();
        for (int[] subArr : arr1) {
            for (int num : subArr) {
                uniqueArr1Elements.add(num);
            }
        }

        // 遍历去重后的数组1元素,检查是否在数组2中,存在则打印
        System.out.println("\n公共元素(去重后):");
        for (int num : uniqueArr1Elements) {
            if (arr2Elements.contains(num)) {
                System.out.println(num);
            }
        }
    }
}

方案二:在原代码基础上修改

新增一个Set记录已经打印过的元素,每次准备打印前先检查该元素是否已输出,未输出才打印并标记,避免重复。

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class CommonElements {
    public static void main(String[] args) {
        int[][] arr1 = new int[][]{{1, 2, 1}, {9, 7, 2}, {7, 3, 6}};
        int[][] arr2 = new int[][]{{2, 6, 8}, {0, 1, 7}, {7, 2, 0}, {8, 3}};

        System.out.println("Input 1:");
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(Arrays.toString(arr1[i]));
        }
        System.out.println("Input 2:");
        for (int j = 0; j < arr2.length; j++) {
            System.out.println(Arrays.toString(arr2[j]));
        }

        boolean duplicate = false;
        // 新增Set记录已打印的元素,避免重复输出
        Set<Integer> printedElements = new HashSet<>();

        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                int transpose = arr1[i][j];
                // 若元素已打印过,直接跳过后续逻辑
                if (printedElements.contains(transpose)) {
                    continue;
                }

                duplicate = false;
                for (int k = 0; k < arr2.length; k++) {
                    for (int l = 0; l < arr2[k].length; l++) {
                        if (transpose == arr2[k][l]) {
                            System.out.println(transpose);
                            printedElements.add(transpose); // 标记为已打印
                            duplicate = true;
                            break;
                        }
                    }
                    if (duplicate) break;
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Akshitha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:22:11