跳到主要内容

2679.矩阵中的和

链接:2679.矩阵中的和
难度:Medium
标签:数组、矩阵、排序、模拟、堆(优先队列)
简介:给你一个下标从 0 开始的二维整数数组 nums 。请你返回最后的 分数 。

题解 1 - cpp

  • 编辑时间:2023-07-04
  • 执行用时:176ms
  • 内存消耗:67.4MB
  • 编程语言:cpp
  • 解法介绍:堆。
class Solution {
public:
int matrixSum(vector<vector<int>>& nums) {
int n = nums.size(), m = nums[0].size();
vector<priority_queue<int>> qs(n);
for (int i = 0; i < n; i++) {
auto &q = qs[i];
for (auto &num : nums[i]) q.push(num);
}
int res = 0;
for (int j = 0; j < m; j++) {
priority_queue<int> q;
for (int i = 0; i < n; i++) {
q.push(qs[i].top());
qs[i].pop();
}
res += q.top();
}
return res;
}
};

题解 2 - cpp

  • 编辑时间:2023-07-04
  • 执行用时:100ms
  • 内存消耗:46.9MB
  • 编程语言:cpp
  • 解法介绍:排序。
class Solution {
public:
int matrixSum(vector<vector<int>>& nums) {
int res = 0;
for (auto &row : nums) sort(row.begin(), row.end());
for (int j = nums[0].size() - 1; j >= 0; j--) {
int val = 0;
for (int i = 0; i < nums.size(); i++) val = max(val, nums[i][j]);
res += val;
}
return res;
}
};

题解 3 - python

  • 编辑时间:2023-07-04
  • 执行用时:132ms
  • 内存消耗:33.6MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def matrixSum(self, nums: List[List[int]]) -> int:
for l in nums:
l.sort()
res = 0
for j in range(len(nums[0]) - 1, -1, -1):
val = 0
for i in range(len(nums)):
val = max(val, nums[i][j])
res += val
return res

题解 4 - rust

  • 编辑时间:2023-07-04
  • 执行用时:20ms
  • 内存消耗:3.6MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn matrix_sum(mut nums: Vec<Vec<i32>>) -> i32 {
let mut res = 0;
for row in &mut nums {
row.sort()
}
for j in (0..nums[0].len()).rev() {
let mut val = 0;
for i in 0..nums.len() {
val = val.max(nums[i][j]);
}
res += val;
}
res
}
}