Подсчитайте пары, разница между которыми и индексами различна.

Опубликовано: 15 Февраля, 2023

Учитывая массив arr[] размера N , задача состоит в том, чтобы подсчитать все пары индексов (i, j), такие что i < j и j – i != arr[j] – arr[i] .

Примеры:

Input: arr[] = {4, 1, 3, 3}
Output: 5
Explanation:
The pair (0, 1) is a valid pair since 1 – 0 != 1 – 4.
The pair (0, 2) is a valid pair since 2 – 0 != 3 – 4, 2 != -1.
The pair (0, 3) is a valid pair since 3 – 0 != 3 – 4, 3 != -1.
The pair (1, 2) is a valid pair since 2 – 1 != 3 – 1, 1 != 2.
The pair (2, 3) is a valid pair since 3 – 2 != 3 – 3, 1 != 0.
There are a total of 5 valid pairs, so we return 5.

Input: arr = {1, 2, 3, 4, 5}
Output: 0
Explanation: There are no valid pairs.

Подход с использованием хеширования:

As per the valid pair is concerned the value of  j – i != arr[j] – arr[i], This can also be written as j – arr[j] != i – arr[i]

We’ll use map to keep the count of element that has value (i – arr[i]) occurred till ith index. If we are at ith index then the valid pair for ith element would be just (Total number of pairs till ith index – count of element that has value (i – arr[i]) till ith index).

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

  • Инициализировать карту для хранения значения (i – arr[i])
  • Инициализировать результат переменной для хранения количества всех допустимых пар
  • Итерация по заданному массиву
    • Сохраните количество всех предыдущих элементов, имеющих значение (i – arr[i]), в переменную count, так как это будет действовать как вся недопустимая пара с элементом с i- м индексом.
    • Добавьте все допустимые пары, удалив из результата недопустимые пары (т. е. результат += i – количество).
    • Увеличьте количество ( i – arr[i] ) в карте для каждого i -го индекса.
  • Вернуть результат.

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

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