Menu
CoddyTech

Count Inversions

Dada una lista de enteros nums, devuelve el número de inversiones: pares de índices i < j con nums[i] > nums[j], es decir, un valor mayor antes que uno menor. Los valores iguales nunca forman una inversión, y una lista ordenada no tiene ninguna.

Función

countInversions(nums: integer-array) → integer
numsinteger-array
la lista de números enteros
Devuelveinteger
el número de pares i &lt; j con nums[i] &gt; nums[j]

Restricciones

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • La respuesta es como máximo n(n-1)/2 < 2 × 108, así que cabe en un entero con signo de 32 bits.

Ejemplos

Entrada
nums = [5, 3, 8, 1, 4]
Salida
6
Explicación
5 va antes que 3, 1 y 4: 3 pares. 3 va antes que 1, y 8 antes que 1 y 4: 3 más. 1 y 4 están en orden, así que el total es 6.
challenge icon

Para ir más allá

¿Qué cambia si un par solo cuenta cuando nums[i] > 2 × nums[j]? ¿Puede la ordenación por mezcla seguir contando esos pares en O(n log n)?

Restablecer código
def countInversions(nums):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumento

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

Salida Esperada

6