Menu
CoddyTech

Count Inversions

Gegeben sei eine Liste von Ganzzahlen nums. Gib die Anzahl der Inversionen zurück: Paare von Indizes i < j, für die nums[i] > nums[j] gilt, also ein größerer Wert vor einem kleineren steht. Gleiche Werte bilden niemals eine Inversion, und eine sortierte Liste enthält keine.

Funktion

countInversions(nums: integer-array) → integer
numsinteger-array
die Liste der Ganzzahlen
Gibt zurückinteger
die Anzahl der Paare i &lt; j, für die nums[i] &gt; nums[j] gilt

Einschränkungen

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • Die Antwort beträgt höchstens n(n-1)/2 < 2 × 108, daher passt sie in eine vorzeichenbehaftete 32-Bit-Ganzzahl.

Beispiele

Eingabe
nums = [5, 3, 8, 1, 4]
Ausgabe
6
Erklärung
5 steht vor 3, 1 und 4: 3 Paare. 3 steht vor 1 und 8 vor 1 und 4: 3 weitere. 1 und 4 sind in der richtigen Reihenfolge, also beträgt die Gesamtzahl 6.
challenge icon

Weiterführende Frage

Was ändert sich, wenn ein Paar nur dann zählt, wenn nums[i] > 2 × nums[j]? Kann Merge-Sort solche Paare weiterhin in O(n log n) zählen?

Code zurücksetzen
def countInversions(nums):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argument

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

Erwartete Ausgabe

6