算法题每日一练---第82天:两个数组的交集 I

1,380 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第17天,点击查看活动详情

一、问题描述

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

题目链接:两个数组的交集 I

二、题目要求

样例 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.哈希
2.建议用时10~25min

三、问题分析

这一题输出结果需要判重,所以如果暴力做的话,双重for循环去重有点麻烦。

我们直接哈希处理吧。

遍历nums1哈希计数,注意这里每个数字出现的次数无论出现多少次,置为1就行,减少复杂度。

循环判断nums2的数是否存在哈希表中,存在哈希值置为0,存储数据就行。

四、编码实现

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        int i;//初始化
        map<int,int>m;//哈希计数
        vector<int>v;//数组存储
        for(i=0;i<nums1.size();i++)
            m[nums1[i]]=1;//置为1
        for(i=0;i<nums2.size();i++)
        {
            if(m[nums2[i]]>0)//哈希表出现过
            {
                v.push_back(nums2[i]);
                m[nums2[i]]=0;//置为0
            }
        }
        return v;//返回结果
    }
};

五、测试结果

4.png