leetcode 349. 两个数组的交集 思考分析
题目
给定两个数组,编写一个函数来计算它们的交集。
1、暴力双for循环
class Solution {public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> result;vector<int> res;if(nums1.size()==0 || nums2.size()==0) return result;for(int i=0;i<nums1.size();i++){for(int j=0;j<nums2.size();j++){if(nums1[i] ==nums2[j]) res.push_back(nums1[i]);}}if(res.size()==0) return result;sort(res.begin(),res.end());//进行去重for(int i=0;i<res.size()-1;i++){if(res[i]!=res[i+1]) result.push_back(res[i]);}result.push_back(res[res.size()-1]);return result;}
};
2、利用哈希集合加速
容器的选择
1、map/multimap的几个特点以及操作
元素包含两部分(key,value),key和value可以是任意类型
根据元素的key自动对元素排序,因此根据元素的key可以进行很快定位
不能直接改变元素的key,可以通过[ ]直接存取元素值
map中不允许key相同的元素,multimap允许key相同的元素
操作 | 效果 |
---|---|
map.c | 产生空的map |
c.size() | 返回元素个数 |
count(key) | 返回键值==key的元素个数 |
find(key) | 返回键值==key 的第一个元素,找不到的话返回end |
lower_bound(key) | 返回键值>=key的第一个元素 |
upper_bound(key) | 返回键值>key的第一个元素 |
equal_range(key) | 返回键值==key的元素区间 |
c.insert(pos,e) | 在pos位置为起点插入e的副本,并返回新元素的位置 |
c.erase(val) | 移除所有值为val的元素,返回移除元素个数 |
2、set/multiset的几个特点
set使用平衡二叉树管理元素(红黑树)
set的每个元素值必须唯一,系统会自动将数据排序。他支持插入、删除、查找等操作,所有的操作都在logN时间之内完成,效率比较高。
set和multiset的区别是:set插入的元素不能相同,而multiset可以相同 操作指令同map
代码
class Solution {public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> result;//构建nums1的哈希集合,自动去重,//set(集合)是将容器内所有元素都能更具其键值自动排序,set元素的键值就是实值。set不允许两个元素有相同的键值unordered_set<int> nums1_res(nums1.begin(),nums1.end());for(int i=0;i<nums2.size();i++){//在哈希集合中寻找是否存在nums2[i]的元素,如果是的把这个元素放入result的哈希表中if(nums1_res.find(nums2[i])!=nums1_res.end())result.insert(nums2[i]); //在集合中插入元素(自动去重处理) }return vector<int>(result.begin(),result.end()); }
};
leetcode 349. 两个数组的交集 思考分析相关推荐
- LeetCode -349 两个数组的交集
难度:简单 给定两个数组 nums1 和 nums2 ,返回它们的交集 .输出结果中的每个元素一定是唯一 的.我们可以不考虑输出结果的顺序 . 题目链接 LeetCode -349 两个数组的交集 S ...
- 两个对象数组交集_yiduobo的每日leetcode 349.两个数组的交集 amp;amp; 350.两个数组的交集II...
祖传的手艺不想丢了,所以按顺序写一个leetcode的题解.计划每日两题,争取不卡题吧 349.两个数组的交集https://leetcode-cn.com/problems/intersection ...
- LeetCode 349 两个数组的交集
349. 两个数组的交集 难度简单476收藏分享切换为英文接收动态反馈 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] ...
- LeetCode 349. 两个数组的交集【哈希表】
349. 两个数组的交集 给定两个数组 nums1 和 nums2 ,返回 它们的交集 .输出结果中的每个元素一定是 唯一 的.我们可以 不考虑输出结果的顺序 . 示例 1: 输入:nums1 = [ ...
- LeetCode 349. 两个数组的交集(哈希)
1. 题目 给定两个数组,编写一个函数来计算它们的交集. 示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2:输入: nums1 = [4,9 ...
- leetcode 349. 两个数组的交集 两种方案,c语言实现
如题: 给定两个数组,编写一个函数来计算它们的交集.示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2]示例 2: 输入: nums1 = [4,9,5 ...
- 13. Leetcode 349. 两个数组的交集 (数组-分离双指针)
给定两个数组,编写一个函数来计算它们的交集.示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2:输入:nums1 = [4,9,5], nums2 ...
- Leetcode 349. 两个数组的交集 (每日一题 20211014)
给定两个数组,编写一个函数来计算它们的交集.示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2:输入:nums1 = [4,9,5], nums2 ...
- Leetcode 349. 两个数组的交集 解题思路及C++实现
解题思路: 先对数组进行排序,然后从小到大去找相同的元素. 程序大循环是遍历两个数组. 循环体内,当找到相等的数之后,要注意跳过重复的数字. class Solution { public:vecto ...
最新文章
- raid模式_基于网络的磁盘热备技术|网络RAID-1
- php 动态输出图片尺寸,高并发下 php 输出图像对性能开销大不大?
- java中random的头文件_JAVA中的Random()函數
- 又一道软通动力7K月薪面试题——银行业务调度系统
- Hi3515支持NFS-ROOT启动
- html中.inner样式,JavaScript-DOM动态控制Html标签对象样式和innerHTML、className属性
- lnmp mysql 自动关闭_mysql总是自动停止 日志提示Plugin ‘FEDERATED’ is disabled的解决办法...
- 【图像增强】python图像数据增强
- Irrlicht引擎例子说明及中文链接
- 高等数学第六版下册答案
- 计算机配置显示器,电脑怎么配置多台显示器
- 2020中青杯A题集成电路通道布线数学建模全过程论文及程序
- python winrar 密码_python+winrar 指令压缩文件
- JavaMail学习6 发送邮件
- 计算机打字速成,计算机汉字输入五笔字型打字速成.pdf
- 删除shipyard
- python get rect 函数_Python之Pygame.rect函数
- [数分笔记]关于有限覆盖定理
- 云和恩墨加入京东云“云筑计划”,共筑PaaS新生态
- python之numpy数组的花式索引