每日一题(LeetCode)----哈希表--两个数组的交集

每日一题(LeetCode)----哈希表–两个数组的交集

1.题目([349. 两个数组的交集](https://leetcode.cn/problems/valid-anagram/))

  • 给定两个数组 nums1nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序

    示例 1:

    输入:nums1 = [1,2,2,1], nums2 = [2,2]
    输出:[2]
    

    示例 2:

    输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出:[9,4]
    解释:[4,9] 也是可通过的
    

    提示:

    • 1 <= nums1.length, nums2.length <= 1000
    • 0 <= nums1[i], nums2[i] <= 1000

2.解题思路

思路一:哈希表

1.创建一个哈希表,这个哈希表中的每个元素的键值表示在数组中出现的元素,实值表示在几个数组中出现过(例如,实值为1表示只在一个数组出现过,实值为2表示在两个数组中都出现了

2.遍历第一个数组,如果遍历到的元素没有在哈希表中出现,我们把当前元素作为键值,然后实值存入1

3.遍历第二个数组,如果遍历到的元素在哈希表中出现过,且出现过的元素在哈希表中对应的实值为1,那么我们更新实值为2

4.创建一个数组(这里是动态数组)来存两个数组的交集,遍历一遍哈希表,把哈希表中实值为2的元素存入到数组中,然后返回这个数组即可

思路二:排序+双指针

1.先将两个数组进行升序排序

2.创建一个结果数组(这里用的是动态数组),用来存这两个数组交集

用两个指针遍历两个数组

如果遍历到的元素相等,那么看当前元素与结果数组的尾元素是否相等,如果不相等就放到我们的结果数组中,两个指针同时向后移动一个元素

如果不相等,那么指向较小元素的指针向后移动一个元素

当其中至少有一个数组遍历完成时,结束遍历

3.写出代码

思路一的代码
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> res;unordered_map<int,int> ma;int length1 = nums1.size();int length2 = nums2.size();for(int i=0;i<length1;i++){if(ma.count(nums1[i])==0){ma[nums1[i]]=1;}}for(int i=0;i<length2;i++){if(ma.count(nums2[i])==1){ma[nums2[i]]=2;}}for(pair<int,int> v:ma){if(v.second==2){res.push_back(v.first);}}return res;}
};
思路二的代码
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> res;sort(nums1.begin(),nums1.end());sort(nums2.begin(),nums2.end());int length1=nums1.size();int length2=nums2.size();int index1=0;int index2=0;while(index1<length1&&index2<length2){int num1 = nums1[index1], num2 = nums2[index2];if (num1 == num2) {if (!res.size() || num1 != res.back()) {res.push_back(num1);}index1++;index2++;} else if (num1 < num2) {index1++;} else {index2++;}}return res;}
};

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

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

相关文章

《深入理解计算机系统》学习笔记 - 第三课 - 位,字节和整型

Lecture 03 Bits,Bytes, and Integer count 位&#xff0c;字节&#xff0c;整型 文章目录 Lecture 03 Bits,Bytes, and Integer count 位&#xff0c;字节&#xff0c;整型运算&#xff1a;加&#xff0c;减&#xff0c;乘&#xff0c;除加法乘法取值范围乘法结果 使用无符号注…

Python Web包就业服务

还在等什么&#xff0c;加入我们&#xff0c;包就业

几何教学工具 Sketchpad几何画板 mac软件特色

Sketchpad几何画板 for Mac是一款适用于macOS系统的几何教学工具&#xff0c;用户可以在其画板上进行各种几何图形的绘制、演示&#xff0c;帮助教师了解学生的思路和对概念的掌握程度。此外&#xff0c;Sketchpad更深层次的功能则是可以用来进行几何交流、研究和讨论&#xff…

js手写面试题【附带注释】

文章目录 前言数组方法手写pushpopshiftunshiftcancatslicespliceforEachmapreducefind 手写订阅发布手写单例模式后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;javaScript &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和…

代码安全-exe的代码签名和代码混淆加密

信息安全相关 - 建设篇 第四章 代码安全-exe的代码签名和代码混淆加密 信息安全相关 - 建设篇系列文章回顾代码安全-exe的代码签名和代码混淆加密前言实施步骤C#程序的程序集引用使用强命名(可选)Windows Server AD CA 制作自定义的证书模板,用于代码签名生成拥有自签名CA的代…

Java并发编程CAS

目录 CAS是什么 CAS存在问题 ABA问题 CPU开销大 不能保证代码块的原子性 CAS实例 CAS是什么 CAS(Compare and Swap,比较并交换)是一种并发编程中的原子操作,用于实现多线程环境下的无锁同步。它是一种乐观锁策略,通过比较内存中的值与期望值是否相等来决定是否更…

机柜浪涌保护器行业应用解决方案

机柜浪涌保护器是一种用于保护机柜内电子设备免受雷电或其他瞬时过电压影响的装置&#xff0c;它可以有效地限制或引导电涌电流&#xff0c;避免设备损坏或数据丢失。机柜浪涌保护器广泛应用于通信、电力、工业控制、医疗、安防等领域&#xff0c;是保障机柜系统安全稳定运行的…

龟兔赛跑python小游戏

# turtle控制游戏角色&#xff0c;Screen控制画布 from turtle import Turtle,Screen import time# 创建画布 screen Screen()# 改变画布大小 screen.setup(1200,600)# 设置背景图&#xff08;必须是gif格式&#xff09; screen.bgpic(背景图.gif)# 设置乌龟的角色 screen.reg…

centos服务器扩容

centos服务器扩容 我的情况是&#xff0c;原服务器是一个80g磁盘&#xff0c;管理员又追加了120G到这块磁盘上&#xff0c;需要把这120G重新追加使用。 请确认你遇到的情况是否和我初始截图一致&#xff0c;再往下看&#xff0c;免得浪费时间与精力 服务器中有120G尚未使用&…

JavaEE(SpringMVC)期末复习(选择+填空+解答)

文章目录 JavaEE期末复习一、单选题&#xff1a;二、多选题三、填空题四、解答 JavaEE期末复习 一、单选题&#xff1a; 1.Spring的核⼼技术是&#xff08; A &#xff09;&#xff1f; A依赖注入 B.JdbcTmplate C.声明式事务 D.资源访问 Spring的核心技术包括依赖注入&#x…

NOI / 1.8编程基础之多维数组 提问24:蛇形填充数组 c语言

描述 用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。 蛇形填充方法为&#xff1a; 对于每一条左下-右上的斜线&#xff0c;从左上到右下依次编号1,2,...,2n-1&#xff1b;按编号从小到大的顺序&#xff0c;将数字从小到大填入各条斜线&#xff0c;其中编号为奇数的…

[Android] c++ 通过 JNI 调用 JAVA

Calling Java from C with JNI - CodeProject

Python进程之间同步实现代码

1、 # coding : UTF-8 import multiprocessing, time # 导入多进程的开发模块 def worker(dict): # 进程的处理函数 while True: # 持续售票 number dict.get("ticket") # 获得当前的票数 if number > 0 : # 如果现在还有剩余票 …

运维 | 四层和七层负载均衡介绍

关注: CodingTechWork 负载均衡 负载均衡介绍 概念 负载均衡是建立在现有的网络结构之上&#xff0c;提供一种廉价且透明的方式进行网络设备和服务器带宽的扩展&#xff0c;从而增加吞吐量&#xff0c;加强应用服务的数据处理能力&#xff0c;有效提高网络的灵活性和可用性。…

深度视觉目标跟踪进展综述

1 引言 目标跟踪旨在基于初始帧中指定的感兴趣目标( 一般用矩形框表示) &#xff0c;在后续帧中对该目标进行持续的定位。 基于深度学习的跟踪算法&#xff0c;采用的框架包括相关滤波器、分类式网络、双路网络等。 处理跟踪任务的角度&#xff0c;分为基于匹配思路的双路网…

操作系统——操作系统概论s

一、操作系统基本概念 1 操作系统定义 操作系统是裸机上的第一层软件&#xff0c;它是对硬件系统功能的首次扩充&#xff0c; 用以填补人与机器之间的鸿沟。 OS定义&#xff1a;操作系统是控制和管理计算机系统内各种硬件和软件资源&#xff0c;有效地组织多道程序运行的系统软…

makefile中常见的环境变量

makefile中常见的环境变量 1&#xff09;CFLAGS&#xff1a;用于指定C语言编译器的选项&#xff0c;例如优化级别、警告级别、编译器标志等。 2&#xff09;CXXFLAGS&#xff1a;用于指定C语言编译器的选项&#xff0c;与CFLAGS类似&#xff0c;但专门针对C代码。 3&#xff0…

W2311283-可燃气体监测仪怎么监测燃气管道

可燃气体监测仪怎么有效监测燃气管道 燃气管道遍布于城市地下各处&#xff0c;作为城市生命线的一部分&#xff0c;一旦燃气管网出现泄露问题便是牵一发而动全身&#xff0c;城市的整体安全也会受到威胁。但是如何才能科学管理和监测燃气管网呢&#xff1f; 燃气管网监测系统便…

米贸搜|如何设置 Facebook 转换 API + 事件重复数据删除

Facebook Pixel 可让您跟踪用户在您网站上的行为、收集再营销受众并创建相似对象。如果 Facebook 像素实现正确&#xff0c;它将向 FB 机器学习算法提供相关信息。 FB ML 将使用像素数据向最有可能转化的人展示您的广告。 几年来&#xff0c;我们可以通过 JavaScript 代码、应…

MapReduce概念

1、概念 MapReduce 是一种编程模型&#xff0c;用于大规模数据集的并行处理。它是由 Google 开发的&#xff0c;用于处理大规模数据集的分布式计算框架。 MapReduce 的主要作用是将一个大的任务分解成多个小的任务&#xff0c;并在多台机器上并行执行这些任务。它包括两…