https://leetcode.cn/problems/intersection-of-two-arrays/description/

查询元素是否重复出现,联想到使用哈希表

<aside> 💡

使用数组1的元素构建哈希表,使用数组2的元素对其进行查询,能够查找到说明该元素在两个数组中重复出现,即是两数组的交集。

</aside>

使用unordered_set

vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
    unordered_set<int> st;
    unordered_set<int> ans;

    for (auto i : nums1) {
        st.insert(i);
    }
    for (auto i : nums2) {
        if (st.find(i) != st.end()) {
            ans.insert(i);
        }
    }
    return vector<int>(ans.begin(), ans.end());
}

使用vector

由于题目有限制两个数组的元素值都<=1000,所以满足使用数组构建哈希表的条件。

vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
	// nums1和nums2中的元素值都<=1000
	vector<int> record1(1001, 0);
	vector<int> record2(1001, 0);
	vector<int> ans;
	for (int i : nums1) {
		++record1[i];
	}
	for (int i : nums2) {
		++record2[i];
	}
	for (int i = 0; i < record1.size(); ++i) {
        // 数组1和数组2中都出现过的元素即为交集
		if (record1[i] != 0 && record2[i] != 0) {
			ans.push_back(i);
		}
	}
	return ans;
}