Menu
CoddyTech

Count Inversions

Dada uma lista de números inteiros nums, retorne o número de inversões: pares de índices i < j com nums[i] > nums[j], em que um valor maior aparece antes de um menor. Valores iguais nunca formam uma inversão, e uma lista ordenada não tem nenhuma.

Função

countInversions(nums: integer-array) → integer
numsinteger-array
a lista de números inteiros
Retornainteger
o número de pares i < j em que nums[i] > nums[j]

Restrições

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • A resposta é no máximo n(n-1)/2 < 2 × 108, então cabe em um inteiro com sinal de 32 bits.

Exemplos

Entrada
nums = [5, 3, 8, 1, 4]
Saída
6
Explicação
5 vem antes de 3, 1 e 4: 3 pares. 3 vem antes de 1, e 8 vem antes de 1 e 4: mais 3. 1 e 4 estão em ordem, então o total é 6.
challenge icon

Para ir além

O que muda se um par só contar quando nums[i] > 2 × nums[j]? A ordenação por intercalação ainda consegue contar esses pares em O(n log n)?

Redefinir código
def countInversions(nums):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumento

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

Saída Esperada

6