Подсчитать количество общих элементов между отсортированным массивом и массивом, отсортированным в обратном порядке
Опубликовано: 22 Сентября, 2022
Даны два массива, состоящие из N различных целых чисел, такие, что массивы A[] и B[] отсортированы в порядке возрастания и убывания соответственно, задача состоит в том, чтобы найти количество значений, общих в обоих массивах.
Примеры:
Input: A[] = {1, 10, 100}, B[] = {200, 20, 2}
Output: 0Input: A[] = {2, 4, 5, 8, 12, 13, 17, 18, 20, 22, 309, 999}, B[] = {109, 99, 68, 54, 22, 19, 17, 13, 11, 5, 3, 1}
Output: 4
Подход: Данная проблема может быть решена с использованием подхода с двумя указателями. Выполните следующие шаги, чтобы решить проблему:
- Инициализируйте две переменные, скажем, первую как 0 , а вторую как (N – 1) , которые используются для обхода массива A[] и B[] спереди и сзади соответственно.
- Инициализируйте переменную, скажем, count как 0 , которая хранит количество чисел, общих в массиве A[] и B[] .
- Повторяйте цикл до тех пор, пока первое < N и второе > = 0 , и выполните следующие шаги:
- Если значение A[first] равно B[second] , тогда увеличьте значения count и first и уменьшите значение second .
- Если значение A[first] меньше, чем B[second] , увеличьте значение first .
- Если значение A[first] больше, чем B[second] , уменьшите значение second .
- После выполнения вышеуказанных шагов выведите в качестве результата значение count .
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(N)
Вспомогательное пространство: O(1)