📝 Descrição
Given a square matrix, calculate the absolute difference between the sums of its diagonals.
📌 Exemplos
Examplo 1:
1 | 2 | 3 |
---|---|---|
4 | 5 | 6 |
9 | 8 | 9 |
- A diagonal principal: 1, 5, 9
- A diagonal secundária: 3, 5, 9
A diferença absoluta é |15 - 17| = 2
✅ Casos de teste
Caso 1
Entrada
3 11 2 4 4 5 6 10 8 -12
Saída
15
🚀 Como resolvi?
Pô, pra resolver esse problema, a gente precisa conseguir somar os valores da diagonal principal e da diagonal secundária. Pra isso, vale lembrar como funciona a indexação em matrizes.
j=1 | j=2 | j=3 | |
---|---|---|---|
i=1 | a₁₁ | a₁₂ | a₁₃ |
i=2 | a₂₁ | a₂₂ | a₂₃ |
i=3 | a₃₁ | a₃₂ | a₃₃ |
A diagonal principal da matriz acima é:
j=1 | j=2 | j=3 | |
---|---|---|---|
i=1 | a₁₁ | a₁₂ | a₁₃ |
i=2 | a₂₁ | a₂₂ | a₂₃ |
i=3 | a₃₁ | a₃₂ | a₃₃ |
Os elementos dessa diagonal seguem o formato a[i][i]
Já a diagonal secundária é:
j=1 | j=2 | j=3 | |
---|---|---|---|
i=1 | a₁₁ | a₁₂ | a₁₃ |
i=2 | a₂₁ | a₂₂ | a₂₃ |
i=3 | a₃₁ | a₃₂ | a₃₃ |
Os elementos pertencentes a ela seguem o formato a[i][i-n-1]
Com isso em mente, dá pra acessar os dois conjuntos de valores, somar tudo e, por fim, retornar o valor absoluto da diferença entre essas somas.
🛠️ Implementação
def diagonalDifference(arr, n) -> int:
left_to_right_diagonal = [arr[i][i] for i in range(n)]
right_to_left_diagonal = [arr[i][n-i-1] for i in range(n)]
return abs(sum(left_to_right_diagonal) - sum(right_to_left_diagonal))
🧠 O que aprendemos?
Dividir o problema em problema menores sempre nos ajudará.