0

我试图在 Java 中找到一种有效的方法来检查两个数组是否至少有一个共同元素。所以这意味着 [1, 2, 2, 3] 和 [2, 3 ,5 ,6] 会给出 False,而 [1, 2, 2, 3] 与 [5, 2, 1, 5] 相比会给出 True . 目前我循环遍历元素,一旦元素之一相等就退出循环。有没有更有效的方法?

4

2 回答 2

1

不要以为你可以做得更好O( min(array1.length, array2.length) )

您可以进行一些微优化,例如循环展开 ( https://en.wikipedia.org/wiki/Loop_unrolling ),尽管您可能需要在走这条路之前仔细考虑。

于 2018-01-26T12:24:48.353 回答
0

您可以逐个元素地比较两个数组,并在找到匹配项时返回 true,否则返回 false。

public class ArrayCheck {

    public static void main(String[] arg){
        int[] a = {1, 2, 2, 3};
        int[] b = {2, 3 ,5 ,6};
        int[] c = {5, 2, 1, 5};

        System.out.println("Result " + elementWiseCompare(a,b));
        System.out.println("Result " + elementWiseCompare(a,c));
    }

    public static boolean elementWiseCompare(int[] a, int [] b){

        for(int i = 0; i < a.length && i < b.length; i++){
            if (a[i] == b[i]){
                return true;
            }
        }
        return false;
    }
}

输出:

结果假 结果真

于 2018-01-26T12:11:50.837 回答