给你一个下标从 0 开始的二维整数数组
nums
。一开始你的分数为0
。你需要执行以下操作直到矩阵变为空:
- 矩阵中每一行选取最大的一个数,并删除它。如果一行中有多个最大的数,选择任意一个并删除。
- 在步骤 1 删除的所有数字中找到最大的一个数字,将它添加到你的 分数 中。
请你返回最后的 分数 。
https://leetcode.cn/problems/sum-in-a-matrix/description/
class Solution {
public int matrixSum(int[][] nums) {
int sum = 0;
for(int i = 0; i < nums.length; i++) {
Arrays.sort(nums[i]);
}
for(int j = nums[0].length - 1; j >= 0; j--) {
int maxNum = Integer.MIN_VALUE;
// 取的次数
for(int i = 0; i < nums.length; i++) {
maxNum = Math.max(maxNum, nums[i][j]);
}
sum += maxNum;
}
return sum;
}
}
解决思路
题目的意思很容易懂,最简单的做法就是遍历数组的每一行,然后找到每一行的最大的一个元素,然后对元素进行比较,找到其中最大的相加即可,但这样做的话需要比较的次数就很多,通过先排序可以快速定位到最大的元素,然后比较只需要比较列中的最大的即可
更多LeetCode: https://github.com/xu-zhi-heng/LeetCode_Question