Проблема подмножества массивов [наименьшее пространство с O (n) сложностью времени] - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу написать функцию в Java, которая принимает 2 массива в качестве входных данных и возвращает true, если меньший массив является подмножеством большего массива

Есть ли способ сделать это ниже кодаsuccint и более экономно (при сохранении 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 голосов
/ 14 февраля 2019

Почему бы не использовать Set<T>?Просто используйте метод removeAll и проверьте размер меньшего Set.Это уже сделано для вас.

smallerSet.removeAll(largerSet);

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