Leetcode349. 两个数组的交集 哈希表解法

news/2024/10/18 2:31:59/

目录

法一、数组

(1)思路

法二、使用unordered_set

(1)注意

(2)思路

①先创建一个unordered_set对象nums_set,把nums1复制给它

②然后遍历nums2,判断nums2中的元素是否在nums1中出现

③如果找到就把nums2中的元素插入新创建的目标容器result_set


法一、数组

/*** Note: The returned array must be malloced, assume caller calls free().*/int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){int Hash[1005]={0};//哈希数组int lessSize=nums1Size<nums2Size?nums1Size:nums2Size;//?:运算大小int * result = (int *) calloc(lessSize, sizeof(int));//calloc(大小,类型),不用计算大小,返回数组初始化为0int returnIndex=0;for(int i=0;i<nums1Size;i++){Hash[nums1[i]]=1;}for( int i=0;i<nums2Size;i++){if(Hash[nums2[i]]==1){result[returnIndex++]=nums2[i];Hash[nums2[i]]=0;}}*returnSize=returnIndex;return result;}

(1)思路

①要找出两个数组的交集,只需要将第一个数组元素映射到hash表中,出现就将数组元素数值对应hash表下标的元素置为1(不管出现几次),结果就是hash表数值为1的元素下标代表着第一个数组出现过的数字;

②然后依次遍历第二个数组,将数组元素数值对应hash表下标的元素为1,就代表第二个数组也出现第一个数组出现的元素,于是存入目标数组,并将该hash数字对应数值置0,避免重复存入目标数组;


法二、使用unordered_set

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int>result_set;unordered_set<int>nums_set(nums1.begin(),nums1.end());for(int num:nums2){if(nums_set.find(num)!=nums_set.end()){result_set.insert(num);}}return vector<int>(result_set.begin(),result_set.end());
}
};

(1)注意

unordered_set是无序集合容器,有唯一的key值使用unordered是为了去重

传入的vector容器是不存在去重功能的

(2)思路

①先创建一个unordered_set对象nums_set,把nums1复制给它

begin()返回容器第一个元素地址 

end()返回容器最后一个元素后一个地址

②然后遍历nums2,判断nums2中的元素是否在nums1中出现

find()如果找到就返回该容器中元素的地址,如果找不到就返回和end()一样的地址

③如果找到就把nums2中的元素插入新创建的目标容器result_set

insert()往容器插入元素


http://www.ppmy.cn/news/191392.html

相关文章

软件测试实验:链接测试

目录 前言实验目的实验环境实验内容实验步骤实验过程总结 前言 本实验的目的是学习和掌握软件测试中的链接测试方法和技巧。链接测试是指对Web应用系统中的各种链接进行检查和验证&#xff0c;以确保它们能正确地指向预期的目标&#xff0c;不出现错误链接、空链接、死链接或孤…

PCL点云处理之PointXYZ、PCLPointCloud2、ROS msg之间的点云数据格式转换(一百七十五)

PCL点云处理之不同格式点云数据之间的转换方法(一百七十五) 一、相关介绍二、具体转换1.PointXYZ 转为 PCLPointCloud22.PCLPointCloud2 转为 PointXYZ3.ROS msg 转为 PointXYZ4.PointXYZ 转为 ROS msg5.ROS msg 转为 PCLPointCloud26.PCLPointCloud2 转为 ROS msg一、相关介…

SONY a7S III解析

SONY a7S III在原有a7 III的基础上&#xff0c;进一步提升全画幅CMOS元件的感光能力&#xff0c;最终以其超强的感光度&#xff0c;高画质的电影拍摄能力&#xff0c;赢得了不少人的认可。a7S III为什么有如此卓越的感光能力呢&#xff1f; a7S III采用全画幅的Exmor R CMOS感光…

Cortex-A7 MPCore简单介绍

1.简介 在 28nm 工艺下&#xff0c; Cortex-A7 可以运行在 1.2~1.6GHz&#xff0c;并且单核面积不大于 0.45mm2(含有浮点单元、 NEON 和 32KB 的 L1 缓存)&#xff0c;在典型场景下功耗小于 100mW&#xff0c; 这使得它非常适合对功耗要求严格的移动设备&#xff0c;这意味着 C…

STM32H7 DAC2+BDMA

最近准备用H7做一个小东西需要用到DAC2生成波形&#xff0c;本以为很简单的事&#xff0c;只需把之前在F4上做的例子搬过来就好&#xff0c;但是发现实际上有个坑。 之前的想法是DAC DMA TIM6 Trig&#xff0c;但是发现DAC2始终无输出&#xff0c;HAL_DAC_SetValue()直接输出…

Cortex-M7 Cache 操作

目录 【Cortex-M7内核的L1 Cache】 二&#xff0c;Cache4种策略 三&#xff0c;Cache读操作和写操作 【cache配合MPU使用】 【什么是 cache 一致性问题】 一&#xff0c;第一种情况 二&#xff0c;第二种情况 【解决cache一致性问题&#xff0c;有两种可选方案】 一&am…

TXAA,MSAA,SMAA,FXAA

1 TXAA是英伟达开发的目前画质最高的抗锯齿模式&#xff0c;且TXAA x2可以达到MSAA x8的效百果&#xff0c;配置要求也没有MSAA x8那么高。目前只有600和700系列的英伟达显卡支持。 2 MSAA还原度很高&#xff0c;但是配置要求最高。 3 SMAA是性耗比最佳的模式&#xff0c;度用适…

Cortex-A7中断系统

一、中断向量表 中断向量表存放的是中断向量&#xff0c;中断服务程序的入口地址或存放中断服务程序的首地址成为中断向量&#xff0c;因此中断向量表是一系列中断服务程序入口地址组成的表。当某个中断被触发以后就会自动跳转到中断向量表中对应的中断服务程序(函数)入口地址…