
贴一下代码
function luckyNumbers (matrix: number[][]): number[] {
let matrixCopy = JSON.parse(JSON.stringify(matrix))
let lineMin = [];
let columnMax = [];
matrix.forEach(item => {
item.sort((a, b) => {return a-b})
lineMin.push(item[0]);
})
for(let i = 0 ; i < matrixCopy[0].length; i++){
let arr = [];
for(let j = 0; j < matrixCopy.length; j++){
arr.push(matrixCopy[j][i]);
arr.sort((a, b) => {return b-a})
}
columnMax.push(arr[0])
}
let resultArr = [];
lineMin.map(item => {
if(columnMax.includes(item)){
resultArr.push(item)
}
return false
})
return resultArr
};
思路:
- 遍历数组,然后排序,得到每一个子数组的最小值,也就是每一行的最小值,返回最小值组成的数组
- 然后再遍历得到每个子数组的第 i 项,组成一个新数组降序,得到每一列的最大值,返回最大值组成的数组
- 求得最小值和最大值数组的公共部分,就是矩阵的幸运数
其他
- 因为用了数组的sort方法,改变了原来数组的顺序,所以要把原始数组复制一份出来,JSON.parse(JSON.stringify(matrix))
- 时间和空间复杂度确实高些,肯定还有其他方法,一时半会确实没想到【doge】