Home > Software engineering >  What does it mean by "second = arr[i][arr.length-i-1]"
What does it mean by "second = arr[i][arr.length-i-1]"

Time:09-05

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.

  • Related