# 题目描述
给你一个下标从 0 开始的二维整数数组 nums
。一开始你的分数为 0 。你需要执行以下操作直到矩阵变为空:
矩阵中每一行选取最大的一个数,并删除它。如果一行中有多个最大的数,选择任意一个并删除。 在步骤 1 删除的所有数字中找到最大的一个数字,将它添加到你的 分数 中。 请你返回最后的 分数 。
提示:
1 <= nums.length <= 300
1 <= nums[i].length <= 500
0 <= nums[i][j] <= 103
# 测试用例
用例1
- 输入:
nums = [[7,2,1],[6,4,2],[6,5,3],[3,2,1]]
- 输出:15
- 解释:第一步操作中,我们删除 7 ,6 ,6 和 3 ,将分数增加 7 。下一步操作中,删除 2 ,4 ,5 和 2 ,将分数增加 5 。最后删除 1 ,2 ,3 和 1 ,将分数增加 3 。所以总得分为 7 + 5 + 3 = 15 。
用例2
- 输入:nums = [[1]]
- 输出:1
- 解释:我们删除 1 并将分数增加 1 ,所以返回 1 。
# 思路
先按行排序,然后遍历列,每一列进行比较,拿到每列的最大值,加到最后的ans
,ans
累加得到最终结果
# 代码实现
/**
* @param {number[][]} nums
* @return {number}
*/
var __readline = require("readline-sync");
__readline.setDefaultOptions({ prompt: "" });
var readline = __readline.prompt;
console.log("请输入行数: ");
let row = Number(readline());
console.log("请按行输入矩阵: ");
const nums = [];
while (row--) {
nums.push(readline().split(",").map(Number));
}
console.log("nums: ", nums);
var matrixSum = function (nums) {
/*
7 2 1
6 4 2
6 5 3
3 2 1
*/
// 每次取一行中的最大值
// 排序?
// 把数组转为字符串
for (let num of nums) {
num.sort((a, b) => b - a);
}
// console.log("curNums: ", nums);
// 每一列取最大值
let max = -1;
let ans = 0;
for (let i = 0; i < nums[0].length; i++) {
for (let j = 0; j < nums.length; j++) {
max = Math.max(max, nums[j][i]);
}
ans += max;
max = -1;
// console.log("ans: ", ans)
}
return ans;
};
const ans = matrixSum(nums);
console.log("结果为: ", ans);
/*
请输入行数:
4
请按行输入矩阵:
7,2,1
6,4,2
6,5,3
3,2,1
nums: [ [ 7, 2, 1 ], [ 6, 4, 2 ], [ 6, 5,
3 ], [ 3, 2, 1 ] ]
结果为: 15
*/
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67