Подсчитайте все возможные пары в заданном массиве с продуктом K

Опубликовано: 20 Сентября, 2022

Дан целочисленный массив arr[] размера N и положительное целое число K , задача состоит в том, чтобы посчитать все пары в массиве с произведением, равным K .

Примеры:

Input: arr[] = {1, 2, 16, 4, 4, 4, 8 }, K=16
Output: 5
Explanation: Possible pairs are (1, 16), (2, 8), (4, 4), (4, 4), (4, 4)

Input: arr[] = {1, 10, 20, 10, 4, 5, 5, 2 }, K=20
Output: 5
Explanation: Possible pairs are (1, 20), (2, 10), (2, 10), (4, 5), (4, 5)

Подход: Идея состоит в том, чтобы использовать хеширование для хранения элементов и проверки, существует ли K/arr[i] в массиве или не использует карту, и соответственно увеличить количество.

Выполните следующие шаги, чтобы решить проблему:

  • Инициализируйте переменную count как 0 , чтобы сохранить ответ.
  • Инициализируйте unordered_map<int, int> mp[] .
  • Перебрать диапазон [0, N) с помощью переменной i и сохранить частоты всех элементов массива arr[] в карте mp[].
  • Перебрать диапазон [0, N), используя переменную i , и выполнить следующие задачи:
    • Инициализируйте индекс переменной как K/arr[i] .
    • Если K не является степенью числа 2 , а index присутствует в карте mp[] , то увеличьте значение count на mp[arr[i]]*mp[index] и сотрите их оба с карты mp[].
    • Если K является степенью числа 2 , а index присутствует в карте mp[] , то увеличьте значение count на mp[index]*(mp[index]-1)/2 и сотрите его с карты mp[].
  • После выполнения вышеуказанных шагов выведите значение count в качестве ответа.

Ниже приведена реализация описанного выше подхода.


Временная сложность: O(N)
Вспомогательное пространство: O(N)