Начиная с этого ввода:
val input: Array<Array<Int>> = arrayOf(
arrayOf(1, 2, 3),
arrayOf(4, 5, 6),
arrayOf(-7, 8, 9)
)
вот как я бы сформулировал диагональные суммы:
val mainDiagonalSum = input.indices
.map { input[it][it] }
.reduce(Int::plus)
val counterDiagonalSum = input.indices
.map { input[input.size - 1 - it][it] }
.reduce(Int::plus)
Обратите внимание, что это улучшение по сравнению с вашим решением, потому что оно не 'нужно создать обратный массив.Это улучшает временную сложность с O (n 2 ) до O (n).
Если вы имеете дело с большими матрицами, было бы полезно уменьшить сложность пространства с O (n).) к O (1), используя fold
вместо reduce
:
val mainDiagonalSum = input.indices
.fold(0) { sum, i -> sum + input[i][i] }
val counterDiagonalSum = input.indices
.fold(0) { sum, i -> sum + input[input.size - 1 - i][i] }