Menu
CoddyTech

Count Inversions

Data una lista di numeri interi nums, restituisci il numero di inversioni: coppie di indici i < j per cui nums[i] > nums[j], ovvero un valore maggiore prima di uno minore. I valori uguali non formano mai un’inversione e una lista ordinata non ne contiene.

Funzione

countInversions(nums: integer-array) → integer
numsinteger-array
l'elenco di interi
Restituisceinteger
il numero di coppie i < j con nums[i] > nums[j]

Vincoli

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • La risposta è al massimo n(n-1)/2 < 2 × 108, quindi rientra in un intero con segno a 32 bit.

Esempi

Input
nums = [5, 3, 8, 1, 4]
Output
6
Spiegazione
5 viene prima di 3, 1 e 4: 3 coppie. 3 viene prima di 1, e 8 prima di 1 e 4: altre 3. 1 e 4 sono in ordine, quindi il totale è 6.
challenge icon

Per approfondire

Cosa cambia se una coppia viene conteggiata solo quando nums[i] > 2 × nums[j]? Il merge sort può ancora contare queste coppie in O(n log n)?

Ripristina il codice
def countInversions(nums):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomento

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

Output atteso

6