Количество троек, индексы и элементы которых расположены в порядке возрастания

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

Дан массив arr[] , состоящий из N целых чисел, задача состоит в том, чтобы найти количество троек, индексы и элементы которых расположены в порядке возрастания.

Примеры:

Input: arr[] = {1, 2, 4, 3}
Output: 2
Explanation: There are 2 possible triplets in the given array such that the elements are in increasing order, i.e, {1, 2, 4} and {1, 2, 3}.

Input: arr[] = {1, 2, 3, 4, 5}
Output: 10

Наивный подход: данная проблема может быть решена путем перебора всех возможных троек (i, j, k) заданного массива и отслеживания количества троек, чьи индексы и элементы в этих индексах расположены в порядке возрастания. После проверки всех троек выведите общее количество полученных троек.

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

Эффективный подход. Описанный выше подход также можно оптимизировать, заметив, что для любого заданного индекса i количество троек, имеющих arr[i] в качестве своего среднего элемента, будет равно количеству целых чисел, меньших, чем arr[i] в диапазоне [1] . , i – 1] * количество целых чисел больше arr[i] в диапазоне [i + 1, N]. Ниже приведены шаги, которые необходимо выполнить для решения данной проблемы, используя приведенное выше наблюдение:

  • Инициализируйте переменную totalCount как 0, которая хранит количество допустимых троек.
  • Перебрать массив arr[] в диапазоне [1, N – 2], используя переменную i , и выполнить следующие шаги:
    • Подсчитайте количество значений меньше, чем arr[i] в диапазоне [0, i – 1] и сохраните значение в переменной K1 .
    • Подсчитайте количество значений больше, чем arr[i] в диапазоне [i + 1, N – 1] и сохраните значение в переменной K2 .
    • Добавьте значение K1*K2 к totalCount .
  • Значение, хранящееся в totalCount , является требуемым ответом.

Ниже приведена реализация вышеуказанного подхода:

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