Menu
CoddyTech

Count Inversions

Mając listę liczb całkowitych nums, zwróć liczbę inwersji: par indeksów i < j, dla których nums[i] > nums[j], czyli większa wartość występuje przed mniejszą. Równe wartości nigdy nie tworzą inwersji, a posortowana lista nie zawiera żadnych inwersji.

Funkcja

countInversions(nums: integer-array) → integer
numsinteger-array
lista liczb całkowitych
Zwracainteger
liczba par i < j, dla których nums[i] > nums[j]

Ograniczenia

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • Wynik wynosi co najwyżej n(n-1)/2 < 2 × 108, więc mieści się w 32-bitowej liczbie całkowitej ze znakiem.

Przykłady

Wejście
nums = [5, 3, 8, 1, 4]
Wyjście
6
Wyjaśnienie
5 jest przed 3, 1 i 4: 3 pary. 3 jest przed 1, a 8 przed 1 i 4: jeszcze 3. 1 i 4 są we właściwej kolejności, więc suma wynosi 6.
challenge icon

Pytanie dodatkowe

Co się zmieni, jeśli para będzie liczona tylko wtedy, gdy nums[i] > 2 × nums[j]? Czy sortowanie przez scalanie nadal może liczyć takie pary w czasie O(n log n)?

Zresetuj kod
def countInversions(nums):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argument

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

Oczekiwany wynik

6