我一直在通過解決 HackerRank 問題來練習我的演算法求解技巧。然而,問題之一是讓我很難理解。它是關于計算方陣“arr”中對角線總和之間的絕對差。
如果方陣是這樣的:
1 2 3
4 5 6
5 2 4
解決方案是這樣的:
1st diagonal = 1 5 4 = 10
2nd diagonal = 3 5 5 = 13
difference = |10 - 13| = 3 <-- This should appear!
所以,我想出了這個解決方案:
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);
}
但是,我找出了除“第二個 = arr[i][arr.length-i-1]”部分之外的所有其他部分。我不明白 [arr.length-i-1] 在做什么。幫助我理解這一點。
uj5u.com熱心網友回復:
當i從 0arr.length - i - 1開始時,從陣列中的最后一個索引開始,并從頭向后迭代。因此,例如,如果有 4 個元素,它將訪問 index [3]、 then [2]、 then [1]、 then [0]。
對于這個問題,陣列的陣列是正方形的。arr[i][arr.length - i - 1]將導致arr[0][2], then arr[1][1], then arr[2][0]- 這是從右上角到左下角的對角線(問題要求您計算)。
如果有 5 個子陣列,則迭代的索引將是arr[0][4], arr[1][3], arr[2][2], arr[3][1], arr[4][0]. 等等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/503656.html
標籤:javascript 数组 算法
下一篇:帶引導程式的堆疊卡
