Вчера был мой 53-й день кодирования. Я решил один вопрос.
Проблема: Подмножество массива другого массива
Даны два массива: a1[0..n-1] размера n и a2[0..m-1] размера м. Задача состоит в том, чтобы проверить, является ли a2[] подмножеством a1[] или нет. Оба массива могут быть отсортированы или не отсортированы.
Пример 1:
Input: a1[] = {11, 1, 13, 21, 3, 7} a2[] = {11, 3, 7, 1} Output: Yes Explanation: a2[] is a subset of a1[]
Пример 2:
Input: a1[] = {1, 2, 3, 4, 5, 6} a2[] = {1, 2, 4} Output: Yes Explanation: a2[] is a subset of a1[]
Пример 3:
Input: a1[] = {10, 5, 2, 23, 19} a2[] = {19, 5, 3} Output: No Explanation: a2[] is not a subset of a1[]
Ваша задача.
Вам не нужно ничего читать или печатать. Ваша задача — завершить функцию isSubset(), которая принимает массив a1[], a2[], его размер n и m в качестве входных данных и вернуть «Да», если arr2 является подмножеством arr1, иначе вернуть «Нет», если arr2 не является подмножеством arr1.
Ожидаемая временная сложность: O(n)
Ожидаемое вспомогательное пространство: O(n)
Решение (в java). Первым шагом будет сортировка двух массивов.
Установите два указателя i и j или a1[] и a2[] соответственно.
Если a1[i] ‹ a2[j], мы увеличим j на 1.
Если a1[i] = a2[j] , мы увеличим j и i на 1.
Если a1[i] › a2[j], мы завершим работу, так как a2[] не является подмножеством a1[].
class Compute { public String isSubset( long a1[], long a2[], long n, long m) { Arrays.sort(a1); Arrays.sort(a2); int i=0, j=0; while( i<n && j<m){ if( a1[i]< a2[j]) i++; else if( a1[i]==a2[j]){ i++; j++; } else if(a1[i]>a2[j]) return "No"; } if( j<m) return "No"; else return "Yes"; } }