Given a square matrix, calculate the absolute difference between the sums of its diagonals.
For example, the square matrix arr is shown below:
The left-to-right diagonal = 1 + 5 + 9 = 15. The right to left diagonal = 3 + 5 + 9 = 17. Their absolute difference is |15 – 17| = 2.
給予一個矩陣,計算對角線之總和的絕對差。 例如,一個方正的矩陣 arr 如下: 123 456 789 從左到右的對角線為 1 + 5 + 9 = 15。從右到左的對角線為 3 + 5 + 9 = 17。 他們的絕對差是 | 15 - 17| = 2。
Example 1:
123 456 989 return 2
solution:
先簡單列出「左到右的對角線」,接著列出「右到左的對角線」,
在用絕對值處理兩者相減,最後回傳該值。
ex. 運用遍歷回圈的過程中,同步將左上與左下值加入對應的對角線中。
Code 1: BigO(n)
'use strict';
const fs = require('fs');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', function(inputStdin) {
inputString += inputStdin;
});
process.stdin.on('end', function() {
inputString = inputString.split('\n');
main();
});
function readLine() {
return inputString[currentLine++];
}
/*
* Complete the 'diagonalDifference' function below.
*
* The function is expected to return an INTEGER.
* The function accepts 2D_INTEGER_ARRAY arr as parameter.
*/
function diagonalDifference(arr) {
// Write your code here
let leftToRight = 0,
rightToLeft = 0
for (let i = 0; i < arr.length; i++) {
leftToRight += arr[i][i]
rightToLeft += arr[arr.length - 1 - i][i]
}
return Math.abs(leftToRight - rightToLeft);
}
function main() {
const ws = fs.createWriteStream(process.env.OUTPUT_PATH);
const n = parseInt(readLine().trim(), 10);
let arr = Array(n);
for (let i = 0; i < n; i++) {
arr[i] = readLine().replace(/\s+$/g, '').split(' ').map(arrTemp => parseInt(arrTemp, 10));
}
const result = diagonalDifference(arr);
ws.write(result + '\n');
ws.end();
}
FlowChart:
Example 1
arr = [ [ 11, 2, 4 ], [ 4, 5, 6 ], [ 10, 8, -12 ] ] leftToRight = arr[0][0] + arr[1][1] + arr[2][2] rightToLeft = arr[2][0] + arr[1][1] + arr[0][2] leftToRight += arr[i][i] rightToLeft += arr[arr.length - 1 - i][i] leftTORight = 0 rightToLeft = 0 step.1 i = 0 leftToRight += arr[0][0] //0 + 11 = 11 rightToLeft += arr[3 - 1 - 0][0] = arr[2][0] //0 + 4 = 4 step.2 i = 1 leftToRight += arr[1][1] //11 + 5 = 16 rightToLeft += arr[3 - 1 - 1][1] //4 + 5 = 9 step.3 i = 2 leftToRight += arr[2][2] //16 + (-12) = 4 rightToLeft ++ arr[3 - 1 - 2][2] //9 + 10 = 19 return Math.abs(leftToRight - rightToLeft) //|4 - 19| = 15