当前位置: 首页 > news >正文

【LeetCode】2363. 合并相似的物品

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 <= 1000
  • items1[i].length == items2[i].length == 2
  • 1 <= valuei, weighti <= 1000
  • items1 中每个 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 中,得到最终答案。

算法情况

  • 时间复杂度:O(n + m), 其中 n 和 m 分别为 items1 和 items2 的长度;

  • 空间复杂度:O(n + m), 其中 n 和 m 分别为 items1 和 items2 的长度。

    在这里插入图片描述

代码

class Solution {
public:vector<vector<int>> mergeSimilarItems(vector<vector<int>>& items1, vector<vector<int>>& items2) {// map默认对key升序排序map<int, int> mp;// 转化为mapfor(auto t : items1){mp[t[0]] = t[1];}for(auto t2: items2){mp[t2[0]] += t2[1];}vector<vector<int>> ans;// map 转化为 vector<vector<int>>for(auto s : mp){vector<int> temp = {s.first, s.second};ans.push_back(temp);}return ans;}
};
http://www.lryc.cn/news/23198.html

相关文章:

  • 华为OD机试题,用 Java 解【出租车计费】问题
  • 【人脸识别】DDL:数据分布知识蒸馏思想,提升困难样本(遮挡、低分辨率等)识别效果
  • 如何管理好仓库/库房?
  • Unity Lighting -- Unity的光源简介
  • Android仿网易云音乐歌单详情页
  • linux基本功系列之free命令实战
  • 华为OD机试模拟题 用 C++ 实现 - 连续子串(2023.Q1)
  • 【软考——系统架构师】UML 建模与架构文档化
  • Spring中常用注解
  • 基于SpringCloud的可靠消息最终一致性06:轮询事务消息
  • Python Flask + Echarts 轻松制作动态酷炫大屏( 附代码)
  • Wepack(1):SourceMap讲解以及使用
  • 华为OD机试题,用 Java 解【最多等和不相交连续子序列】问题
  • Kubernetes06:Controller
  • 采购文件中 RFI、RFQ、RFP、IFB的区别
  • linux升级gcc版本详细教程
  • NBA Top Shot 跌落神坛
  • 状态管理Pinia使用详解(带你入门)
  • Linux系统基础命令(一)
  • djvu批量转换为pdf的工具和djvu阅读器(附下载链接)
  • Linux | 分布式版本控制工具Git【版本管理 + 远程仓库克隆】
  • FFmpeg 编译和集成
  • OOM的俩种情况---主动kill/被动kill
  • ssh远程连接ECS实例连接失败
  • [框架设计] MVVM 的介绍,应用及优缺点
  • 4G模块DTU网关远程抄表方案(二):DL645/698协议国网电表
  • 认识微服务
  • 升级Android Studio Electric Eel问题汇总
  • 令执法机构头疼的“虚拟货币犯罪”,为何链上天眼能“行”
  • 【unity】开发rts 3