题目:

  给定两个数组,编写一个函数来计算它们的交集。

示例:

  输入: 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---简单相关推荐

  1. LeetCode 350. 两个数组的交集 II

    350. 两个数组的交集 II 难度简单640收藏分享切换为英文接收动态反馈 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集.返回结果中每个元素出现的次数,应与元素在两 ...

  2. 两个数组的交集 II

    两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 ...

  3. leetcode初级算法4.两个数组的交集 II

    leetcode初级算法4.两个数组的交集 II 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] intersect(int[] nums1, in ...

  4. 两个对象数组交集_yiduobo的每日leetcode 349.两个数组的交集 amp;amp; 350.两个数组的交集II...

    祖传的手艺不想丢了,所以按顺序写一个leetcode的题解.计划每日两题,争取不卡题吧 349.两个数组的交集https://leetcode-cn.com/problems/intersection ...

  5. leetcode系列-350.两个数组的交集II

    leetcode系列–第350题.两个数组的交集II 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集. 返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一 ...

  6. LeetCode算法题350:两个数组的交集II(Intersection of Two Arrays II)

    技术交流可以加: 本人微信:xcg852390212 本人qq:852390212 学习交流qq群1(已满): 962535112 学习交流qq群2: 780902027 两个数组的交集II Leet ...

  7. Leetcode 350. 两个数组的交集 II 解题思路及C++实现

    解题思路: 和349. 两个数组的交集 这道题目很相似,这道题只是在返回的数组中,多了重复的数字,其实相较于349题,350题更简单. 先对两个数组进行排序,然后遍历这两个数组,找到相同的数字之后,就 ...

  8. 350. Intersection of Two Arrays II 两个数组的交集 II

    Title 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = ...

  9. leetcode350. 两个数组的交集 II

    给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...

  10. Leetcode-数据结构-350. 两个数组的交集 II

    问题 给两个整数数组 nums1 和 nums2 ,请以 数组形式 返回两数组的 交集 (其在交集中出现的次数:等于该数字在两个数组中出现次数的最小值). 返回结果中 每个元素出现的次数(for遍历) ...

最新文章

  1. github下载慢,轻松提速教程
  2. 《电路分析导论(原书第12版)》一3.12 热敏电阻
  3. 6.TMG2010公网发布
  4. react-native 小米手机和 mac 安装
  5. 二十六、数据挖掘电力窃漏电用户自动识别
  6. 一款研发管理软件的对象标签介绍
  7. React Native使用指南-在设备上运行
  8. Q绑查询html单页源码 自带接口
  9. 使用javamail 发送邮件
  10. 【Pytorch】LeNet的pytorch写法
  11. Android 入门篇(一)环境搭建
  12. 在用户空间加载和卸载驱动
  13. linux文件监控和同步,(转)Linux下经过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步...
  14. 系列教程丨用 Docker 探索开源软件 —— Elasticsearch(一)
  15. Nginx源码编译安装
  16. SQLite崩溃处理
  17. C语言—俄罗斯方块(新手向)
  18. 简单PHP会话(session)说明
  19. 【POJ 3311】Hie with the Pie(状压DP)
  20. 计算机翻译图片,如何将电脑图片中的文字翻译成英文

热门文章

  1. 内核全新优化UI界面影视双端源码
  2. KesionICMS智能建站系统v8源码
  3. SkinSharp皮肤模块源码 原33个皮肤模块
  4. Video.js实现rtmp视频播放
  5. WEB产品展示Bootstrap4模板
  6. Visio2007 与Microsoft Studio 2008不兼容
  7. HTML5: 全局属性
  8. xml 中插入html代码
  9. 9个PHP库简介和下载
  10. iptables二之防火墙SNAT源地址转换,MASQUERADE地址伪装之DNAT目标地址转换讲解和实验演示