1. 程式人生 > 其它 >(JS)隨機生成一個N*N的矩陣,找出鞍點

(JS)隨機生成一個N*N的矩陣,找出鞍點

技術標籤:面試題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]; } }

測試arr

在這裡插入圖片描述

測試arr2

在這裡插入圖片描述