【问题标题】:Min value on main diagonal of the 2D Array二维数组主对角线上的最小值
【发布时间】:2021-08-19 12:40:25
【问题描述】:
我设法创建了一个二维数组并用我的代码自动填充它。我想在主对角线上找到最小值,但我被卡住了,不知道如何从我的代码中处理这个想法。谁能解释一下我如何才能做到这一点?我尝试过或想出的一切都没有结果..
var matrix = Array.from(Array(10), () => new Array(10));
for(i=0; i<10; i++){
for(j=0; j<10; j++)
matrix[i][j] = Math.floor(Math.random() * 100);
}
console.log(matrix);
【问题讨论】:
标签:
javascript
multidimensional-array
diagonal
【解决方案1】:
构造一个对角线的一维数组。将 Math.min 与 .apply 一起使用以查找该数组中的最小值。
var matrix = Array.from(Array(10), () => new Array(10));
for(i=0; i<10; i++){
for(j=0; j<10; j++)
matrix[i][j] = Math.floor(Math.random() * 100);
}
const diag = matrix.map((m, i) => m[i]);
const min = Math.min.apply(null, diag);
console.log(diag, "min = " + min);
【解决方案2】:
二维方阵(矩阵)的主对角线始终在col_index == row_index,因此您可以遍历数组以找到通过它的最小值。
我在 sn-p 中将数组设置为 3x3 以显示更简单的情况,但您也可以将其设置为 10x10 来尝试。
function getMinimumOfDiag(arr) {
var min = Infinity;
for (var i = 0; i < arr.length; i++)
if(arr[i].length > i)
if(arr[i][i] < min)
min = arr[i][i]
return min;
};
var matrix = Array.from(Array(3), () => new Array(3));
for(i=0; i<3; i++){
for(j=0; j<3; j++)
matrix[i][j] = Math.floor(Math.random() * 100);
}
console.log(matrix);
console.log(getMinimumOfDiag(matrix));
【解决方案3】:
假设矩阵具有相同长度的行和列,这应该可以,
var matrix = Array.from(Array(10), () => new Array(10));
const matrixLength = 10;
for(let i=0; i<matrixLength; i++){
for(j=0; j<matrixLength; j++)
matrix[i][j] = Math.floor(Math.random() * 100);
}
let minValueInDiagonal = Number.MAX_SAFE_INTEGER;
for(let i = 0; i < matrixLength; i++) {
minValueInDiagonal = Math.min(matrix[i][i], minValueInDiagonal);
}
console.log("Matrix is", matrix);
console.log("Min value in diagonal is: ", minValueInDiagonal);