这是来自 hackerrack.com 的问题,
问题的解释
我解决了问题,但我无法找到乐观的解决方案,我们可以使用对象文字并找到最佳解决方案吗?
function getTwoDimention(input){
var input = input.split('\n');
var twoDimArr=[];
for(var n=0; n<input.length; n++){
var subarr = input[n].split(' ');
if(subarr.length > 1){
twoDimArr.push(subarr)
}
}
return twoDimArr;
}
function getFristDiagonal(twoDimArr){
var sum = 0;
for(var i=0; i<twoDimArr.length; i++){
for(var j=i; j<=i; j++){
sum += parseFloat(twoDimArr[i][j]);
}
}
return sum;
}
function getSecondDiagonal(twoDimArr){
var sum = 0;j=twoDimArr.length-1;
for(var i=0; i<twoDimArr.length; i++){
sum += parseFloat(twoDimArr[i][j--]);
}
return sum;
}
function processData(input) {
//Enter your code here
twoDimArr = getTwoDimention(input);
var firtDia = getFristDiagonal(twoDimArr);
var secDia = getSecondDiagonal(twoDimArr);
console.log(secDia - firtDia);
}
实际工作代码在jsfiddle
对于某些测试用例,当每行的元素数量不同时,它也会失败 提前非常感谢
let d1 = 0;
let d2 = 0;
let j = 0;
let k = arr.length-1;
for(let i = 0; i < arr.length; i++){
// from left to right
d1 += arr[i][j]
j++;
// from right to left
d2 += arr[i][k]
k--;
}
const diff = Math.abs(d1-d2)
return diff;
}
你有一个提供长度的输入线,但你只是 丢弃该值并且不检查它
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int a[][] = new int[n][n];
for(int a_i=0; a_i < n; a_i++){
for(int a_j=0; a_j < n; a_j++){
a[a_i][a_j] = in.nextInt();
}
}
int count=0;
int sum1=0;
int sum2=0;
for(int i=0,j=n;i<n && j>0;j--,i++){
if(count==i){
sum1=sum1+a[i][count];
sum2=sum2+a[j-1][count];
count++;
}
}
System.out.println(Math.abs(sum1-sum2));
}
public class DiagonalDiffererence {
public static void main(String args[]) {
int a[][] = new int[][] { { 11, 2, 4 }, { 4, 5, 6 }, { 10, 8, -12 }};
int left = 0;
int right = a.length - 1;
int leftDig = 0;
int rightDig = 0;
for (int i = 0; i < a.length; i++) {
leftDig += a[i][left++];
rightDig += a[i][right--];
}
int sum = Math.abs(leftDig - rightDig);
System.out.println(sum);
}
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
(2,0) (2,1) (2,2)
所以 d1 之和 = (0,0) + (1,1) + (2,2) => d1 += arr[i][i] 和 d2 = (0,2) + (1,1) + (2,0) => d2 += arr[i][(arr.length-1) - i]
function diagonalDifference(arr) {
let d1 = 0;
let d2 = 0;
for(let i = 0; i<arr.length ; i++) {
d1 += arr[i][i];
d2 += arr[i][arr.length - 1 - i];
}
return Math.abs(d1-d2)
}