【力扣349题 两个数组的交集代码详解】

原代码

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

    }
};

语言是C++,时间复杂度为O(n),空间复杂度为O(1)

代码详解

vector<int> 

这句代码的意思为定义一个int类型的容器。
通俗来讲就是一个长度可以改变的int数组,加以区分叫容器。

vector<int> intersection(vector<int>& nums1, vector<int>& nums2)

这是函数的定义,表明返回值为一个int类型的容器;函数名为intersection;有两个参数,两参数都是容器的地址,这两个容器存放需要操作的两个数组。(这里num1 和 num2就可以理解为指向两个容器首地址的指针)

unordered_set<int> res;
unordered_set<int> num_set(nums1.begin(),nums1.end());

unordered_set :这是c++自带的数据结构,并不知道准确的中文名字哈哈哈,但是可以简单描述一下,可以直译为无序容器有点类似于vector,但是有区别,第一unordered_set底层是哈希表实现的,是一个无需表,且数组元素不能重复,自带的查询方法 删除方法的效率为O(1)1
unordered_set num_set(nums1.begin(),nums1.end());
这里将vector容器转换为unordered_set容器。但是要注意的是,nums1.begin()这个函数返回的是一个指针,指向第一个元素;nums1.end()返回的是一个指针 指向的是最后一个元素的后一个空间,这里要注意,不然后面的判断语句会读不明白。我学习到这也卡了一会。

for(int num : nums2)

循环语句,每次循环将nums2里的元素取一个出来赋值给num;
有点像python里的for x in y:
这是个语法知道就行

if(num_set.find(num)!=num_set.end())
         {
             res.insert(num);
         }

num_set.find(num):在num_set容器中寻找num,如果找到返回对应元素的指针,找不到返回的指针于num_set.end()返回的指针一样。这我在上面提到了,要理解end()方法的返回值。
res.insert(num):如果找到相同的值,插入到res容器中,但是注意,res是unordered_set类型的容器,里面的数值不会重复,这是函数方法自身会解决的不用我们自己来搞。

return vector<int>(res.begin(),res.end());

最后就是函数返回,根据返回类型重新构建一下返回值。


  1. 连接:link ↩︎

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值