Menu
CoddyTech

Count Inversions

Diberikan sebuah list bilangan bulat nums, kembalikan jumlah inversi: pasangan indeks i < j dengan nums[i] > nums[j], yaitu nilai yang lebih besar berada sebelum nilai yang lebih kecil. Nilai yang sama tidak pernah membentuk inversi, dan list yang sudah terurut tidak memiliki inversi.

Fungsi

countInversions(nums: integer-array) → integer
numsinteger-array
daftar bilangan bulat
Mengembalikaninteger
jumlah pasangan i < j dengan nums[i] > nums[j]

Batasan

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • Jawabannya paling banyak n(n-1)/2 < 2 × 108, jadi nilainya muat dalam bilangan bulat bertanda 32-bit.

Contoh

Input
nums = [5, 3, 8, 1, 4]
Output
6
Penjelasan
5 muncul sebelum 3, 1, dan 4: 3 pasangan. 3 muncul sebelum 1, dan 8 muncul sebelum 1 dan 4: 3 pasangan lagi. 1 dan 4 sudah berurutan, jadi totalnya 6.
challenge icon

Pertanyaan lanjutan

Apa yang berubah jika sepasang hanya dihitung ketika nums[i] > 2 × nums[j]? Apakah merge sort masih bisa menghitung pasangan tersebut dalam O(n log n)?

Reset kode
def countInversions(nums):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

6