LeetCode 350. 两个数组的交集 II(哈希)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 hash
      • 2.2 数组已排序

1. 题目

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

示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。

进阶:

  • 如果给定的数组已经排好序呢?你将如何优化你的算法?
  • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
  • 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 hash

  • 对数组1建立hash键值对,记录元素出现次数
  • 数组2在上面hash表中查找,找到了,push该数进入answer,并将hash表的值减1,当表的值为0时,不能再取该数
  • 时间复杂度O(n1+n2)O(n1+n2)O(n1+n2), 空间复杂度O(n1)O(n1)O(n1)

在这里插入图片描述

class Solution {
public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {unordered_map<int,int> m1;int i;vector<int> ans;for(i = 0; i < nums1.size(); ++i){if(m1.find(nums1[i]) == m1.end())m1[nums1[i]] = 1;elsem1[nums1[i]]++;}for(i = 0; i < nums2.size(); ++i){if(m1.find(nums2[i]) != m1.end() && m1[nums2[i]] > 0){ans.push_back(nums2[i]);m1[nums2[i]]--;}}return ans;}
};

2.2 数组已排序

  • 如果数组已排序,双指针,分别定位在数组首位
  • 如果nums[i]>nums2[j],j++如果nums[i] > nums2[j], j++nums[i]>nums2[j],j++
  • 如果nums[i]<nums2[j],i++如果nums[i] < nums2[j], i++nums[i]<nums2[j],i++
  • 如果nums[i]=nums2[j],i++,j++如果nums[i] = nums2[j], i++,j++nums[i]=nums2[j],i++,j++
  1. 如果nums1数组小,第二种方法更好,最坏时间复杂度O(max(n1,n2))O(max(n1,n2))O(max(n1,n2))
  2. 如果nums2数组很大,不能一次加载到内存,可以等分成x份,分别与nums1数组进行求交集
    在这里插入图片描述
class Solution {
public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());int i, j;vector<int> ans;for(i = 0, j = 0; i < nums1.size() && j < nums2.size(); ){if(nums1[i] < nums2[j])++i;else if(nums1[i] > nums2[j])++j;else// nums1[i] == nums2[j]{ans.push_back(nums1[i]);++i,++j;}}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会议交流 | CCKS2020 第十四届全国知识图谱与语义计算大会

CCKS2020第十四届全国知识图谱与语义计算大会China Conference on Knowledge Graph and Semantic Computing, 2020南昌.江西&#xff0c;11月12日-15日主办: 中国中文信息学会语言与知识计算专业委员会承办: 江西师范大学会议网站&#xff1a;www.sigkg.cn/ccks2020大会主题&a…

用微前端的方式搭建类单页应用

前言 微前端由ThoughtWorks 2016年提出&#xff0c;将后端微服务的理念应用于浏览器端&#xff0c;即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。 美团已经是一家拥有几万人规模的大型互联网公司&#xff0c;提升整体效率至关重要&#xff0c;这需要很…

12种NumpyPandas高效技巧

文 | Kunal Dhariwal本文分享给大家 12 种 Numpy 和 Pandas 函数&#xff0c;这些高效的函数会令数据分析更为容易、便捷。最后&#xff0c;读者也可以在 GitHub 项目中找到本文所用代码的 Jupyter Notebook。项目地址&#xff1a;https://github.com/kunaldhariwal/12-Amazing…

LeetCode 1002. 查找常用字符(哈希)

1. 题目 给定仅有小写字母组成的字符串数组 A&#xff0c;返回列表中的每个字符串中都显示的全部字符&#xff08;包括重复字符&#xff09;组成的列表。例如&#xff0c;如果一个字符在每个字符串中出现 3 次&#xff0c;但不是 4 次&#xff0c;则需要在最终答案中包含该字符…

抖音算法推荐机制详解

抖音算法推荐机制详解&#xff01;&#xff08;科普向&#xff09; 众所周知抖音的流量分配是去中心化的&#xff0c;这种去中心化算法&#xff0c;让每个人都有机会爆红&#xff0c;可为什么别人几个粉玩抖音&#xff0c;就能轻松获得10w点赞?而你怒拍几十条也枉然? 抖音的…

论文浅尝 - ICLR2020 | 用于半监督分类的图形推理学习

论文笔记整理&#xff1a;周虹廷&#xff0c;浙江大学研究生。研究方向&#xff1a;知识图谱&#xff0c;图表示学习等。论文链接&#xff1a;https://arxiv.org/pdf/2001.06137.pdf本文是发表在ICLR2020上针对图数据做节点半监督分类任务的论文。现有的算法解决图上节点分类问…

WMRouter:美团外卖Android开源路由框架

WMRouter是一款Android路由框架&#xff0c;基于组件化的设计思路&#xff0c;功能灵活&#xff0c;使用也比较简单。 WMRouter最初用于解决美团外卖C端App在业务演进过程中的实际问题&#xff0c;之后逐步推广到了美团其他App&#xff0c;因此我们决定将其开源&#xff0c;希望…

Android官方开发文档Training系列课程中文版:管理系统UI之变暗系统条

原文地址&#xff1a;http://android.xsoftlab.net/training/system-ui/index.html 引言 系统条(System Bars)是屏幕上的一块显示区域&#xff0c;专门用来显示通知&#xff0c;设备的通讯状态以及设备的导向。典型的System Bars与APP同时显示在屏幕上。APP展示了具体的内容&…

实话实说:中文自然语言处理的N个真实情况

文 | Liu Huanyong按语中文自然语言处理&#xff0c;目前在AI泡沫之下&#xff0c;真假难辨&#xff0c;实战技术与PPT技术往往存在着很大的差异。目前关于AI或者自然语言处理&#xff0c;做的人与讲的人往往是两回事。作者简介Liu Huanyong&#xff0c;就职于中国科学院软件研…

Android官方开发文档Training系列课程中文版:管理系统UI之隐藏状态条

原文地址&#xff1a;http://android.xsoftlab.net/training/system-ui/status.html 这节课将会介绍如何隐藏不同的版本的状态条。隐藏状态条可以使内容展示区域更大&#xff0c;因此可以提供一种更强的身临其境的用户体验。 含有状态条的APP&#xff1a; 隐藏状态条的APP&am…

论文浅尝 - ACL2020 | 用于回答知识库中的多跳复杂问题的查询图生成方法

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士。来源&#xff1a;ACL 2020链接&#xff1a;https://www.aclweb.org/anthology/2020.acl-main.91.pdf1.介绍在以往的工作中&#xff0c;知识图谱复杂问答一般被分为两种类型分别处理&#xff1a;其一是带有约束的问题&…

深入理解JSCore

背景 动态化作为移动客户端技术的一个重要分支&#xff0c;一直是业界积极探索的方向。目前业界流行的动态化方案&#xff0c;如Facebook的React Native&#xff0c;阿里巴巴的Weex都采用了前端系的DSL方案&#xff0c;而它们在iOS系统上能够顺利的运行&#xff0c;都离不开一个…

全球44家机构,55位大佬,历时两年,打造最强NLG评测基准!

文 | 小轶&#xff08;大家好&#xff0c;我是已经鸽了夕总仨月没写文章了的小轶&#xff08;y&#xff09;&#xff01;新的一年一定改过自新&#xff0c;多读paper多写稿&#xff0c;望广大读者敦促(ง •̀_•́)ง&#xff09;今天要和大家分享的是卖萌屋学术站上的本月最热…

LeetCode 171. Excel表列序号(26进制转10进制)

1. 题目 给定一个Excel表格中的列名称&#xff0c;返回其相应的列序号。 例如&#xff0c;A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 输入: "A" 输出: 1输入: "AB" 输出: 28输入: "ZY" 输出: 701来源&#xff1a;力扣&…

用户评论标签的抽取

原文链接&#xff1a;https://blog.csdn.net/shijing_0214/article/details/71036808 无意中在知乎中看到一个问题&#xff1a;淘宝的评论归纳是如何做到的&#xff1f; 了解之后觉得较为容易实现&#xff0c;就简单实现了一个对用户评论的标签抽取功能&#xff0c;纯属兴趣所致…

开源开放|数据地平线通过OpenKG开放全行业因果事理、大规模实时事理等7类常识知识库...

本期介绍开放中文简称、中文同义、中文抽象、全行业因果事理、实体概念描述、实时事理知识库、军事武器装备知识等七个事理相关知识图谱。截至目前&#xff0c;该七个数据集规模达数千万、累计下载次数达两千余次&#xff0c;可用于底层事理推理、查询扩展、数据增强等多个自然…

写给工程师的十条精进原则

引言 时间回到8年前&#xff0c;我人生中第一份实习的工作&#xff0c;是在某互联网公司的无线搜索部做一个C工程师。当时的我可谓意气风发&#xff0c;想要大干一场&#xff0c;结果第一次上线就写了人生中第一个Casestudy。由于对部署环境的不了解&#xff0c;把SVN库里的配置…

我删掉了Transformer中的这几层…性能反而变好了?

文 | chaos编 | 小轶基于Transformer结构的各类语言模型&#xff08;Bert基于其encoder,Gpt-2基于其decoder&#xff09;早已经在各类NLP任务上大放异彩&#xff0c;面对让人眼花缭乱的transformer堆叠方式&#xff0c;你是否也会感到迷茫&#xff1f;没关系&#xff0c;现在让…

LeetCode 821. 字符的最短距离

1. 题目 给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。 示例 1:输入: S "loveleetcode", C e 输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链…

论文浅尝 - ESWC2020 | ESBM:一个面向实体摘要的评测集

本文转载自公众号&#xff1a;南大Websoft。实体摘要&#xff08;Entity Summarization&#xff09;&#xff0c;是知识图谱研究与应用中的一个关键问题。南京大学Websoft团队为此制作了一个评测集&#xff0c;称作ESBM&#xff0c;是目前可以公开获取的规模最大的评测集。这项…