Menu
CoddyTech

Count Inversions

Для заданного списка целых чисел nums верните количество инверсий: пар индексов i < j, для которых nums[i] > nums[j], то есть больший элемент стоит перед меньшим. Равные значения никогда не образуют инверсию, а в отсортированном списке инверсий нет.

Функция

countInversions(nums: integer-array) → integer
numsinteger-array
список целых чисел
Возвращаетinteger
число пар i < j, для которых nums[i] > nums[j]

Ограничения

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • Ответ не превышает n(n-1)/2 < 2 × 108, поэтому он помещается в 32-разрядное целое число со знаком.

Примеры

Ввод
nums = [5, 3, 8, 1, 4]
Вывод
6
Пояснение
5 стоит перед 3, 1 и 4: 3 пары. 3 стоит перед 1, а 8 — перед 1 и 4: ещё 3. 1 и 4 расположены в правильном порядке, поэтому всего получается 6.
challenge icon

Дополнительный вопрос

Что изменится, если пара учитывается только тогда, когда nums[i] > 2 × nums[j]? Может ли сортировка слиянием по-прежнему подсчитывать такие пары за O(n log n)?

Сбросить код
def countInversions(nums):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргумент

nums = [5, 3, 8, 1, 4]

Ожидаемый вывод

6