厦门专业的网站建设,上海网站 工作室室,昆山网站公司哪家好,受欢迎的建网站公司来源#xff1a;力扣#xff08;LeetCode#xff09;
描述#xff1a;
给你一个 m x n 大小的矩阵 grid #xff0c;由若干正整数组成。
执行下述操作#xff0c;直到 grid 变为空矩阵#xff1a;
从每一行删除值最大的元素。如果存在多个这样的值#xff0c;删除其…来源力扣LeetCode
描述
给你一个 m x n 大小的矩阵 grid 由若干正整数组成。
执行下述操作直到 grid 变为空矩阵
从每一行删除值最大的元素。如果存在多个这样的值删除其中任何一个。将删除元素中的最大值与答案相加。
注意 每执行一次操作矩阵中列的数据就会减 1 。
返回执行上述操作后的答案。
示例 1 输入grid [[1,2,4],[3,3,1]]
输出8
解释上图展示在每一步中需要移除的值。
- 在第一步操作中从第一行删除 4 从第二行删除 3注意有两个单元格中的值为 3 我们可以删除任一。在答案上加 4 。
- 在第二步操作中从第一行删除 2 从第二行删除 3 。在答案上加 3 。
- 在第三步操作中从第一行删除 1 从第二行删除 1 。在答案上加 1 。
最终答案 4 3 1 8 。示例 2 输入grid [[10]]
输出10
解释上图展示在每一步中需要移除的值。
- 在第一步操作中从第一行删除 10 。在答案上加 10 。
最终答案 10 。提示
m grid.lengthn grid[i].length1 m, n 501 grid[i][j] 100
方法排序
思路与算法
我们将题目给出大小为 m×n 的矩阵 grid 每一行从小到大排序那么题目等价于每次删除矩阵的末尾列得分为该列的最大值。那么最后的答案就是每一列的最大值之和。
代码
class Solution {
public:int deleteGreatestValue(vectorvectorint grid) {int m grid.size(), n grid[0].size();for (int i 0; i m; i) {sort(grid[i].begin(), grid[i].end());}int res 0;for (int j 0; j n; j) {int mx 0;for (int i 0; i m; i) {mx max(mx, grid[i][j]);}res mx;}return res;}
};执行用时8 ms, 在所有 C 提交中击败了98.87%的用户 内存消耗9.1 MB, 在所有 C 提交中击败了91.35%的用户 复杂度分析 时间复杂度O(m×n×logn)其中 mn 分别为矩阵 grid 的行列数对矩阵 grid 的每一行排序的时间复杂度为 n×logn共有 m 行所以总的时间复杂度为 O(m×n×logn)。 空间复杂度O(logn)排序需要的栈开销。 authorLeetCode-Solution