Menu
CoddyTech

Count Inversions

Étant donné une liste d’entiers nums, renvoie le nombre d’inversions : les paires d’indices i < j telles que nums[i] > nums[j], c’est-à-dire une valeur plus grande avant une valeur plus petite. Des valeurs égales ne forment jamais une inversion, et une liste triée n’en contient aucune.

Fonction

countInversions(nums: integer-array) → integer
numsinteger-array
la liste d’entiers
Renvoieinteger
le nombre de paires i < j telles que nums[i] > nums[j]

Contraintes

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • La réponse est au plus n(n-1)/2 < 2 × 108, elle tient donc dans un entier signé de 32 bits.

Exemples

Entrée
nums = [5, 3, 8, 1, 4]
Sortie
6
Explication
5 vient avant 3, 1 et 4 : 3 paires. 3 vient avant 1, et 8 avant 1 et 4 : 3 de plus. 1 et 4 sont dans le bon ordre, donc le total est de 6.
challenge icon

Pour aller plus loin

Qu'est-ce qui change si une paire ne compte que lorsque nums[i] > 2 × nums[j] ? Le tri fusion peut-il toujours compter ces paires en O(n log n) ?

Réinitialiser le code
def countInversions(nums):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Argument

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

Résultat attendu

6