跳到主要内容

2363.合并相似的物品

链接:2363.合并相似的物品
难度:Easy
标签:数组、哈希表、有序集合、排序
简介:请你返回一个二维数组 ret,其中 ret[i] = [valuei, weighti], weighti 是所有价值为 valuei 物品的 重量之和 。

题解 1 - cpp

  • 编辑时间:2023-02-28
  • 执行用时:24ms
  • 内存消耗:6.4MB
  • 编程语言:cpp
  • 解法介绍:遍历。
class Solution {
public:
vector<vector<int>> mergeSimilarItems(vector<vector<int>>& items1, vector<vector<int>>& items2) {
map<int, int> m;
for (auto &item : items1) m[item[0]] += item[1];
for (auto &item : items2) m[item[0]] += item[1];
vector<vector<int>> res;
for (auto &item : m) res.push_back({ item.first, item.second });
return res;
}
};

题解 2 - python

  • 编辑时间:2023-02-28
  • 执行用时:36ms
  • 内存消耗:15.5MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def mergeSimilarItems(self, items1: List[List[int]], items2: List[List[int]]) -> List[List[int]]:
l = [0] * 1005
for [k, v] in items1:
l[k] += v
for [k, v] in items2:
l[k] += v
res = []
for i in range(1005):
if l[i]:
res.append([i, l[i]])
return res

题解 3 - rust

  • 编辑时间:2023-02-28
  • 执行用时:4ms
  • 内存消耗:2.3MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn merge_similar_items(items1: Vec<Vec<i32>>, items2: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
let mut m = std::collections::HashMap::<i32, i32>::new();
for item in items1 {
let v = m.entry(item[0]).or_insert(0);
*v += item[1];
}
for item in items2 {
let v = m.entry(item[0]).or_insert(0);
*v += item[1];
}
let mut res = m
.into_iter()
.map(|(k, v)| vec![k, v])
.collect::<Vec<Vec<i32>>>();
res.sort_by_key(|item| item[0]);
res
}
}