「每日LeetCode」2023年2月7日

本文最后更新于:2023年3月19日 晚上

2500.删除每行中的最大值

2500.删除每行中的最大值

Category Difficulty Likes Dislikes
algorithms Easy (87.13%) 4 -

Tags
Companies
给你一个 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.length
  • n == grid[i].length
  • 1 <= m, n <= 50
  • 1 <= grid[i][j] <= 100

Discussion | Solution

思路

按题意模拟即可

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
* @lc app=leetcode.cn id=2500 lang=javascript
*
* [2500] 删除每行中的最大值
*/

// @lc code=start
/**
* @param {number[][]} grid
* @return {number}
*/
var deleteGreatestValue = function (grid) {
let sum = 0;
while (grid.length) {
let maxNum = -Infinity;
for (let i = 0; i < grid.length; i++) {
let maxIndex = 0,
max = -Infinity;
for (let j = 0; j < grid[i].length; j++) {
const num = grid[i][j];
if (num > max) {
maxIndex = j;
max = num;
}
}
maxNum = Math.max(maxNum, grid[i][maxIndex]);
grid[i].splice(maxIndex, 1);
if (grid[i].length === 0) {
grid.splice(i, 1);
i--;
}
}
sum += maxNum;
}
return sum;
};
// @lc code=end

deleteGreatestValue([[10]]);