Menu
CoddyTech

Count Inversions

Bir tamsayı listesi nums verildiğinde, terslemelerin sayısını döndür: i < j ve nums[i] > nums[j] koşullarını sağlayan indeks çiftleri; yani daha küçük bir değerden önce gelen daha büyük bir değer. Eşit değerler hiçbir zaman tersleme oluşturmaz ve sıralı bir listede hiç tersleme yoktur.

Fonksiyon

countInversions(nums: integer-array) → integer
numsinteger-array
tamsayıların listesi
Döndürürinteger
nums[i] > nums[j] koşulunu sağlayan i < j çiftlerinin sayısı

Kısıtlar

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • Cevap en fazla n(n-1)/2 < 2 × 108 olur; bu nedenle işaretli 32 bitlik bir tam sayıya sığar.

Örnekler

Girdi
nums = [5, 3, 8, 1, 4]
Çıktı
6
Açıklama
5, 3, 1 ve 4’ten önce gelir: 3 çift. 3, 1’den; 8 ise 1 ve 4’ten önce gelir: 3 çift daha. 1 ve 4 sıralıdır, dolayısıyla toplam 6’dır.
challenge icon

Ek soru

Bir çift yalnızca nums[i] > 2 × nums[j] olduğunda sayılırsa ne değişir? Merge sort bu çiftleri hâlâ O(n log n) süresinde sayabilir mi?

Kodu sıfırla
def countInversions(nums):
    # Kodu buraya yazın

Test #1

Test #2

Test #3

Argüman

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

Beklenen Çıktı

6