[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;
}
}
个人解题思路与优秀答案解析
题目分析及个人版思路
- 遍历...回填...我的代码虽然不是最优... 但是最清晰...哈哈哈哈哈哈
- 反正我又不比赛
进阶版思路
果然我是正常人. 跟着题目走... 大佬都是跟着解题方法走
突出一个能跑就行
佬
佬
阅
好好好
大佬666
666
大佬
已阅!
牛牛牛