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

目录

法一、数组

(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

(1)思路

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

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


法二、使用unordered_set

class Solution {
public:
    vector intersection(vector& nums1, vector& nums2) {
    unordered_setresult_set;
    unordered_setnums_set(nums1.begin(),nums1.end());
        for(int num:nums2){
            if(nums_set.find(num)!=nums_set.end()){
                result_set.insert(num);
            }
        }
    return vector(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()往容器插入元素

你可能感兴趣的:(LeetCode.,散列表,数据结构)