矩阵中的幸运数

178 阅读1分钟

矩阵中的幸运数

image.png

贴一下代码

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】