算法题训练 ——— NC313 两个数组的交集
题目要求
描述
给定两个整数数组分别为nums1nums1, nums2nums2,找到它们的公共元素并按返回
数据范围:
1≤nums1.length,nums2.length≤10001≤nums1.length,nums2.length≤1000
1≤nums1[i],nums2[i]≤10001≤nums1[i],nums2[i]≤1000
示例1
输入:
[1,2 ],[2,2,2,2]
返回值:
[2]
说明:
两个数组的公共元素只有2
示例2
输入:
[1,2,3],[8,2,2,3,8]
返回值:
[2,3]
说明:
两个数组的公共元素为2和3,返回[3,2]也是一个正确的答案
题目分析
算法原理
哈希思想
哈希思想
因为题目中两个数组的范围是大于等于 1 ,小于等于 1000
所以只需要创建一个 1001 大小的 bool 数组,和其中一个数组 nums1 的数据进行一一映射的关系,对应下标存储了数组的数据后状态改为为 true
在再另一个数组中找出相同的数字,找到后把状态改为 false
最后再返回相同的数字
代码实现
class Solution
{
bool hash[1001] = { 0 };
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
vector<int> ret;
for (auto x : nums1)
{
hash[x] = true;
}
for (auto y : nums2)
{
if (hash[y] == true)
{
ret.push_back(y);
hash[y] = false;
}
}
return ret;
}
};