I been practicing my algorithm solving skill by solving HackerRank problems. However, one of the problems is giving me a difficult time to understand. It is about calculating absolute difference between sum of diagonals in a square matrix "arr".
If the square matrix is like this:
1 2 3
4 5 6
5 2 4
and the solution is like this:
1st diagonal = 1 5 4 = 10
2nd diagonal = 3 5 5 = 13
difference = |10 - 13| = 3 <-- This should appear!
So, I came up with this solution:
function diagonalDifference(arr) {
let first = 0;
let second = 0;
let diff = 0;
for(let i = 0; i < arr.length; i ){
first = arr[i][i];
second = arr[i][arr.length-i-1]
}
diff = first - second;
return Math.abs(diff);
}
However, I figure out all other parts except the "second = arr[i][arr.length-i-1]" part. I don't understand what [arr.length-i-1] is doing. Help me understand this.
CodePudding user response:
When i
starts at 0, arr.length - i - 1
starts at the last index in the array and iterates backwards towards the beginning. So, for example, if there are 4 elements, it'll access index [3]
, then [2]
, then [1]
, then [0]
.
For this problem, the array of arrays is square. arr[i][arr.length - i - 1]
will result in arr[0][2]
, then arr[1][1]
, then arr[2][0]
- which is the diagonal from the top right to the bottom left (which the problem is asking you to calculate).
If there were 5 subarrays, the indicies iterated over would be arr[0][4]
, arr[1][3]
, arr[2][2]
, arr[3][1]
, arr[4][0]
. And so on.