[leetCode 丶 20241128] 3033. 修改矩阵

原题: 3033.修改矩阵


描述:

描述


个人版答案

执行用时: 12 ms 执行内存消耗: 44.90 M

class Solution {
    public int[][] modifiedMatrix(int[][] matrix) {
        List<Integer/* jMax */> max = new ArrayList<>();
        Map<Integer/* j */, List<String/* i,j */>> idx = new HashMap<>();
        // 循环填充 防止位置无效
        for(int i = 0; i<51;i++){
            max.add(-1);
            idx.put(i, new ArrayList<>());
        }
        // 遍历二维数组
        for (int i = 0; i < matrix.length; i++) { // 外层循环遍历行
            for (int j = 0; j < matrix[i].length; j++) { // 内层循环遍历列
                int m =  matrix[i][j];
                if(max.get(j) < m){
                    // 最大值
                    max.set(j, m);
                }
                if(m == -1){
                    List<String> index = idx.get(j);
                    index.add(i+","+j);
                    idx.put(j, index);
                }
            }
        }
        // 遍历最大值列表
        for(int i= 0;i< max.size(); i++){
            int m = max.get(i);
            List<String> index = idx.get(i);
            if(index.size() != 0 && m != -1){
                for(String ix: index){
                    String[] x = ix.split(",");
                    matrix[Integer.parseInt(x[0])][Integer.parseInt(x[1])] = m;
                }
            }
        }
        return matrix;
    }
}

优秀解法

执行耗时: 0 ms

class Solution {
    public int[][] modifiedMatrix(int[][] matrix) {
        int row = matrix.length;
        int col = matrix[0].length;
        for (int j = 0; j < col; j++) {
            int maxVal = 0;
            for (int i = 0; i < row; i++) {
                maxVal = Math.max(maxVal, matrix[i][j]);
            }
            for (int i = 0; i < row; i++) {
                if (matrix[i][j] == -1) {
                    matrix[i][j] = maxVal;
                }
            }
        }
        return matrix;
    }
}

个人解题思路与优秀答案解析

题目分析及个人版思路

  1. 遍历...回填...我的代码虽然不是最优... 但是最清晰...哈哈哈哈哈哈
  2. 反正我又不比赛

进阶版思路
果然我是正常人. 跟着题目走... 大佬都是跟着解题方法走