Leetcode每日一题 20240705 3033.修改矩阵

题目描述

给你一个下标从 0 开始、大小为 m x n 的整数矩阵 matrix ,新建一个下标从 0 开始、名为 answer 的矩阵。使 answer 与 matrix 相等,接着将其中每个值为 -1 的元素替换为所在列的 最大 元素。
返回矩阵 answer 。
3033.修改矩阵

测试案例及提示

示例 1:
输入:matrix = [[1,2,-1],[4,-1,6],[7,8,9]]
输出:[[1,2,9],[4,8,6],[7,8,9]]
解释:
将单元格 [1][1] 中的值替换为列 1 中的最大值 8 。
将单元格 [0][2] 中的值替换为列 2 中的最大值 9 。

示例 2:
输入:matrix = [[3,-1],[5,2]]
输出:[[3,2],[5,2]]

提示:
m == matrix.length
n == matrix[i].length
2 <= m, n <= 50
-1 <= matrix[i][j] <= 100
测试用例中生成的输入满足每列至少包含一个非负整数。

解题思路

整体思路:遍历一次matrix,如果是-1就把这一列最大的元素加入结果数组,否则就直接加入。那么如何求每一列的最大值就是一个问题了,这里可以考虑两种方式,一种是python中的zip()函数,可以对列表进行转置,然后获取最大值。另一种是常规的遍历,但需要先遍历列再遍历行。
Python代码实现:

class Solution:
    def modifiedMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
        h = len(matrix) # 行
        l = len(matrix[0])  # 列
        ans = [[None for _ in range(l)] for _ in range(h)]  # 目标数组
        tran_matrix = zip(*matrix)
        max_nums = [max(column) for column in tran_matrix]
        for i,row in enumerate(matrix):
            for j, element in enumerate(row):
                if element == -1:
                    ans[i][j] = max_nums[j]
                else:
                    ans[i][j] = element
        return ans

Java代码实现:

class Solution {
    public int[][] modifiedMatrix(int[][] matrix) {
        int h = matrix.length;
        int l = matrix[0].length;
        int[][] ans = new int[h][l];
        for (int j = 0; j < l; j++) {
            int max_num = -1;
            for (int i = 0; i < h; i++) {
                if (matrix[i][j] > max_num) {
                    max_num = matrix[i][j];
                }
            }
            for (int i = 0; i < h; i++) {
                ans[i][j] = matrix[i][j] == -1 ? max_num : matrix[i][j];
            }
        }
        return ans;
    }
}

小声bb:Python什么都好,就是不用Numpy的话创建二维数组不直观,不方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值