两个数组的交集 II---简单
题目:
给定两个数组,编写一个函数来计算它们的交集。
示例:
输入: nums1 = [1,2,2,1] nums2 = [2,2]
输出: [2,2]
思路:
比较浅显的O(n^2)的做法就是用一个bool数组保存着nums2的元素是否可以被取。暂时没有什么更简便的想法。
class Solution { public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {int length1=nums1.size();int length2=nums2.size();vector<bool> if_taken{length2};vector<int> result;for(int i=0;i<length1;i++){for(int j=0;j<length2;j++){if(nums1[i]==nums2[j]){if(!if_taken[j]){result.push_back(nums2[j]);if_taken[j]=true;continue;}}}}return result;} };
结果就是数据量大了,内存不够了呢。
让我们来看看更简便的解法吧:
有一种方法是使用哈希表,先保存第一个数组元素出现的次数,再在nums2中遍历,时间复杂度为O(n)。
class Solution { public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {if (nums1.empty()) return {};if (nums2.empty())return {};vector<int> result;map<int,int> nums;for (auto i = nums1.cbegin(); i < nums1.cend(); ++i){++nums[*i];}for (int i = 0; i < nums2.size(); ++i){if (nums[nums2[i]]){result.push_back(nums2[i]);--nums[nums2[i]] ;}}return result;} };
第二种方法先排序,然后使用双指针,看起来复杂度为O(n^2)呢。不过却是最快的,应该还要更详细的数学分析。可以看到,虽然有两个循环,可是每个数组都只遍历了一次,所以是O(nlogn)+O(n)=O(nlogn)
class Solution { public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {vector<int> result;std::sort(nums1.begin(), nums1.end());std::sort(nums2.begin(), nums2.end());int index = 0;for (int i = 0; i < nums1.size(); ++i) {for (int j = index; j < nums2.size(); ++j) {if (nums1[i] == nums2[j]) {result.push_back(nums1[i]);index = j + 1;break;}if (nums1[i] < nums2[j]) {break;}}}return result;} };
转载于:https://www.cnblogs.com/manch1n/p/10308329.html
两个数组的交集 II---简单相关推荐
- LeetCode 350. 两个数组的交集 II
350. 两个数组的交集 II 难度简单640收藏分享切换为英文接收动态反馈 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集.返回结果中每个元素出现的次数,应与元素在两 ...
- 两个数组的交集 II
两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 ...
- leetcode初级算法4.两个数组的交集 II
leetcode初级算法4.两个数组的交集 II 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] intersect(int[] nums1, in ...
- 两个对象数组交集_yiduobo的每日leetcode 349.两个数组的交集 amp;amp; 350.两个数组的交集II...
祖传的手艺不想丢了,所以按顺序写一个leetcode的题解.计划每日两题,争取不卡题吧 349.两个数组的交集https://leetcode-cn.com/problems/intersection ...
- leetcode系列-350.两个数组的交集II
leetcode系列–第350题.两个数组的交集II 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集. 返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一 ...
- LeetCode算法题350:两个数组的交集II(Intersection of Two Arrays II)
技术交流可以加: 本人微信:xcg852390212 本人qq:852390212 学习交流qq群1(已满): 962535112 学习交流qq群2: 780902027 两个数组的交集II Leet ...
- Leetcode 350. 两个数组的交集 II 解题思路及C++实现
解题思路: 和349. 两个数组的交集 这道题目很相似,这道题只是在返回的数组中,多了重复的数字,其实相较于349题,350题更简单. 先对两个数组进行排序,然后遍历这两个数组,找到相同的数字之后,就 ...
- 350. Intersection of Two Arrays II 两个数组的交集 II
Title 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = ...
- leetcode350. 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...
- Leetcode-数据结构-350. 两个数组的交集 II
问题 给两个整数数组 nums1 和 nums2 ,请以 数组形式 返回两数组的 交集 (其在交集中出现的次数:等于该数字在两个数组中出现次数的最小值). 返回结果中 每个元素出现的次数(for遍历) ...
最新文章
- github下载慢,轻松提速教程
- 《电路分析导论(原书第12版)》一3.12 热敏电阻
- 6.TMG2010公网发布
- react-native 小米手机和 mac 安装
- 二十六、数据挖掘电力窃漏电用户自动识别
- 一款研发管理软件的对象标签介绍
- React Native使用指南-在设备上运行
- Q绑查询html单页源码 自带接口
- 使用javamail 发送邮件
- 【Pytorch】LeNet的pytorch写法
- Android 入门篇(一)环境搭建
- 在用户空间加载和卸载驱动
- linux文件监控和同步,(转)Linux下经过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步...
- 系列教程丨用 Docker 探索开源软件 —— Elasticsearch(一)
- Nginx源码编译安装
- SQLite崩溃处理
- C语言—俄罗斯方块(新手向)
- 简单PHP会话(session)说明
- 【POJ 3311】Hie with the Pie(状压DP)
- 计算机翻译图片,如何将电脑图片中的文字翻译成英文