数组子集问题[时间为O(n)的最小空间]

时间:2019-02-13 23:16:45

标签: java arrays time-complexity

我想用Java编写一个函数,该函数将2个数组作为输入,如果较小的数组是较大数组的子集,则返回true

是否有一种方法可以使下面的代码简洁明了并节省空间(同时保持O(n)时间复杂性?

public boolean isArraySubset(int[] arr1, int arr2[]) {
    Set<Integer> set = new HashSet<>();

    int largeArr[];
    int smallArr[];
    if (arr1.length > arr2.length) {
        largeArr = arr1;
        smallArr = arr2;
    } else {
        largeArr = arr2;
        smallArr = arr1;
    }
    for (int i : largeArr) {
        set.add(i);
    }
    for (int i : smallArr) {
        if (!set.contains(i)) {
            return false;
        }
    }

    return true;
}

1 个答案:

答案 0 :(得分:3)

为什么不使用Set<T>?只需使用removeAll方法并检查较小的Set的大小即可。这种事情已经为您完成。

smallerSet.removeAll(largerSet);

if (smallerSet.isEmpty()) {
   // It's a subset
}