(JS)隨機生成一個N*N的矩陣,找出鞍點
阿新 • • 發佈:2021-01-27
技術標籤:面試題javascript
隨機生成一個N*N的矩陣,找出鞍點
鞍點:行中最大的數,列中最小的數
例如:
[
[1,9,4],
[8,2,5],
[7,6,3]
]
不存在鞍點
[
[1,2,3],
[4,5,6],
[7,8,9]
]
鞍點為3
步驟
let arr = [
[1, 9, 4],
[8, 2, 5],
[7, 6, 3]
];
let arr2 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
// 找出鞍點
// 隨機生成二維陣列
function ranDomArr(rows,cols) {
let tmp = Array.of();
for(let i = 0;i<rows;i++) {
tmp[i] = [];
for(let k = 0;k<cols;k++) {
tmp[i].push(parseInt(Math.random()*1000));
}
}
return tmp;
}
function eachSaddle(arr) {
// 行中最大值陣列
let rowArr = [];
// 將陣列轉換為列陣列
let colArr = [];
// 找出行中最大的陣列成新的一維陣列
for (let i = 0; i < arr.length; i++) {
rowArr.push(Math.max.apply(null, arr[i]))
}
let k = 0;
// 將陣列重新排列,轉換為列陣列
for (let i = 0; i < arr.length; i++) {
let temp = [];
for (let j = 0; j < arr.length; j++) {
// 因為要轉換成列,所以需要取到每行中第1,2,3個數
temp.push(arr[j][k])
}
k++;
colArr.push(temp);
}
// 找出列陣列中最小的陣列成陣列
let colMinArr = []
for (let x = 0; x < colArr.length; x++) {
colMinArr.push(Math.min.apply(null, colArr[x]));
}
// 如果是鞍點,那麼行陣列和列陣列中都應該存在,所以找出相同的數就可以了
let x = rowArr.filter(item => {
if (colMinArr.indexOf(item) > 0) {
return item;
}
});
if (x.length === 0) {
return '沒有鞍點';
} else {
return x[0];
}
}