上海网站建设公司介绍网络优化工程师
题目要求
描述
给定两个整数数组分别为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;}
};