2023-07-04 LeetCode每日一题(矩阵中的和)

2023-07-04每日一题

一、题目编号

2679. 矩阵中的和

二、题目链接

点击跳转到题目位置

三、题目描述

给你一个下标从 0 开始的二维整数数组 nums 。一开始你的分数为 0 。你需要执行以下操作直到矩阵变为空:

  1. 矩阵中每一行选取最大的一个数,并删除它。如果一行中有多个最大的数,选择任意一个并删除。
  2. 在步骤 1 删除的所有数字中找到最大的一个数字,将它添加到你的 分数 中。

请你返回最后的 分数

提示:

  • 1 <= nums.length <= 300
  • 1 <= nums[i].length <= 500
  • 0 <= nums[i][j] <= 103

四、解题代码

class Solution {
    
    
public:
    int matrixSum(vector<vector<int>>& nums) {
    
    
        int m = nums.size();
        int n = nums[0].size();
        int sum = 0;
       
        for(int i = 0; i < m; ++i){
    
    
            sort(nums[i].begin(), nums[i].end(), greater<int>());
        }
       
        for(int j = 0; j < n; ++j){
    
    
            int max0 = -1;
            for(int i = 0; i < m; ++i){
    
    
                max0 = max(max0, nums[i][j]);
            }
            sum += max0;
        }
        
    return sum;
    }
};
class Solution:
    def matrixSum(self, nums: List[List[int]]) -> int:
        res = 0
        m = len(nums)
        n = len(nums[0])
        for i in range(m):
            nums[i].sort()
        for j in range(n):
            max_val = 0
            for i in range(m):
                max_val = max(max_val, nums[i][j])
            res += max_val
        return res

五、解题思路

(1) 首先题目里面的要求是,<1> 找出每一行的最大值,然后将最大值删除。<2> 在这些删除的数字中找出一个最大的数字。

(2) 我们记nums.size() 等于m,nums[0].size() 等于 n。那么我们首先需要做的是,就是利用cpp中自带的sort函数,来将矩阵的每一行从大到小来进行排序。

(3) 那么我们思考一下,每一次找出的最大值,都在一列上。那是因为经过排序后,数字已经变成从大到小排序了。

(4) 那我们从左到右遍历这n列,这n列就分别对应我们要删除n次的对应的数字。紧接着,我们用线性枚举的方式,找出这每一列中最大的数字,那么每一列中这个最大的数字,就加入到我们结果的总分之中即可。

猜你喜欢

转载自blog.csdn.net/qq_56086076/article/details/131526886
今日推荐