2023-07-27每日一题
一、题目编号
2500. 删除每行中的最大值
二、题目链接
点击跳转到题目位置
三、题目描述
给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。
执行下述操作,直到 grid 变为空矩阵:
- 从每一行删除值最大的元素。如果存在多个这样的值,删除其中任何一个。
- 将删除元素中的最大值与答案相加。
注意 每执行一次操作,矩阵中列的数据就会减 1 。
返回执行上述操作后的答案。
提示:
- m == grid.length
- n == grid[i].length
- 1 <= m, n <= 50
- 1 <= grid[i][j] <= 100
示例1:
示例2:
四、解题代码
class Solution {
public:
int deleteGreatestValue(vector<vector<int>>& grid) {
for(int i = 0; i < grid.size(); ++i){
sort(grid[i].begin(), grid[i].end(), greater<int>());
}
int ret = 0;
for(int i = grid[i].size() - 1; i >= 0; --i){
int max0 = 0;
for(int j = 0; j < grid.size(); ++j){
max0 = max(max0, grid[j][i]);
}
ret += max0;
}
return ret;
}
};
五、解题思路
(1) 因为每一次都要删除每一行最大的元素,为了方便删除,所以我们先将每一行的数组从大到小排序,这样我们顺序遍历后得到的每一行的数字就是从大到小的。
(2) 然后我们纵向遍历,意味着每一列每一列遍历,这样我们每次找到的都是每一行最大的数字。然后我们一次遍历就可以得到这一列需要删除的数字中最大的数字,将结果加上该最大的数字即可。
(3) 最后返回结果即可得到正确的结果。