汽车网站建设页面,工业设计最吃香的专业,惠州网络推广,开发游戏需要学什么专业2363. 合并相似的物品
题目描述
给你两个二维整数数组 items1 和 items2 #xff0c;表示两个物品集合。每个数组 items 有以下特质#xff1a;
items[i] [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 #xff0c;weighti 表示第 i 件物品的 重量 。items 中每…2363. 合并相似的物品
题目描述
给你两个二维整数数组 items1 和 items2 表示两个物品集合。每个数组 items 有以下特质
items[i] [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 weighti 表示第 i 件物品的 重量 。items 中每件物品的价值都是 唯一的 。
请你返回一个二维数组 ret其中 ret[i] [valuei, weighti] weighti 是所有价值为 valuei 物品的 重量之和 。
注意ret 应该按价值 升序 排序后返回。 示例 1
输入items1 [[1,1],[4,5],[3,8]], items2 [[3,1],[1,5]] 输出[[1,6],[3,9],[4,5]] 解释 value 1 的物品在 items1 中 weight 1 在 items2 中 weight 5 总重量为 1 5 6 。 value 3 的物品再 items1 中 weight 8 在 items2 中 weight 1 总重量为 8 1 9 。 value 4 的物品在 items1 中 weight 5 总重量为 5 。 所以我们返回 [[1,6],[3,9],[4,5]] 。 示例 2
输入items1 [[1,1],[3,2],[2,3]], items2 [[2,1],[3,2],[1,3]] 输出[[1,4],[2,4],[3,4]] 解释 value 1 的物品在 items1 中 weight 1 在 items2 中 weight 3 总重量为 1 3 4 。 value 2 的物品在 items1 中 weight 3 在 items2 中 weight 1 总重量为 3 1 4 。 value 3 的物品在 items1 中 weight 2 在 items2 中 weight 2 总重量为 2 2 4 。 所以我们返回 [[1,4],[2,4],[3,4]] 。 示例 3
输入items1 [[1,3],[2,2]], items2 [[7,1],[2,2],[1,4]] 输出[[1,7],[2,4],[7,1]] 解释 value 1 的物品在 items1 中 weight 3 在 items2 中 weight 4 总重量为 3 4 7 。 value 2 的物品在 items1 中 weight 2 在 items2 中 weight 2 总重量为 2 2 4 。 value 7 的物品在 items2 中 weight 1 总重量为 1 。 所以我们返回 [[1,7],[2,4],[7,1]] 。 提示
1 items1.length, items2.length 1000items1[i].length items2[i].length 21 valuei, weighti 1000items1 中每个 valuei 都是 唯一的 。items2 中每个 valuei 都是 唯一的 。 算法一map 和 vector 的转化
思路
首先将 items1 里的 value 和 weight 转换为 map 对应的 键值对由于 map 会默认对 key 升序排序因此此时的顺序已经满足了题目的要求。接着遍历 items2 将 items2 中对应的物品也加入到 map 中。此时 map 里存储的键值对就是答案但是这道题要求我们返回二维 vector 因此还需要将 map 转化为 二维 vector。
收获
一开始想要哈希表但是如果用下标存储 value 太浪费空间了如果是使用二维数组作为哈希表遍历 items2 的时候又难以获得 value 最后看了提示可以用 map 。map 访问对象 key - map.first value - map.second如何将 map 转化为 二维 vector 这个我想了很久后来发现可以创建一维 vector将 map.first 和 map.second 放入再将一维数组 push_back 到二维数组 ans 中得到最终答案。
算法情况 时间复杂度On m 其中 n 和 m 分别为 items1 和 items2 的长度 空间复杂度On m 其中 n 和 m 分别为 items1 和 items2 的长度。
代码
class Solution {
public:vectorvectorint mergeSimilarItems(vectorvectorint items1, vectorvectorint items2) {// map默认对key升序排序mapint, int mp;// 转化为mapfor(auto t : items1){mp[t[0]] t[1];}for(auto t2: items2){mp[t2[0]] t2[1];}vectorvectorint ans;// map 转化为 vectorvectorintfor(auto s : mp){vectorint temp {s.first, s.second};ans.push_back(temp);}return ans;}
};