题目要求:
给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
幸运数是指矩阵中满足同时下列两个条件的元素:
在同一行的所有元素中最小
在同一列的所有元素中最大
示例 1:
输入:matrix = [[3,7,8],[9,11,13],[15,16,17]]
输出:[15]
解释:15 是唯一的幸运数,因为它是其所在行中的最小值,也是所在列中的最大值。
解题思路:
先找出每一列的最大值和每一行的最小值,判断是否有元素同时满足minrow[i]==matrix[i][j]&&maxcol[j]==matrix[i][j]
代码展示:
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var luckyNumbers = function(matrix) {
const m = matrix.length;
const n = matrix[0].length;
const minrow = new Array(m).fill(Number.MAX_SAFE_INTEGER);
const maxcol = new Array(n).fill(0);
for(let i = 0;i<m;i++){
for(let j = 0;j<n;j++){
minrow[i]=Math.min(minrow[i],matrix[i][j]);
maxcol[j]=Math.max(maxcol[j],matrix[i][j]);
}
}
const result = [];
for(let i = 0;i<m;i++){
for(let j = 0;j<n;j++){
if(minrow[i]==matrix[i][j]&&maxcol[j]==matrix[i][j]){
result.push(matrix[i][j]);
break;
}
}
}
return result;
};
运行结果: