這道題的意思很明確,就是讓尋找兩個數組中的共同元素,并去重,由此可以聯想到哈希表的特性,注意到題目給的數據范圍,在1000以內,所以本題可以使用 STL 的庫函數,也可以使用數組進行模擬。
本題要求去重的交集,因此選用unordered_set。相比于set(紅黑樹實現,O(log n)查找),unordered_set(哈希表實現,平均O(1)查找)在效率上更優。
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {// 使用unordered_set存儲nums1的元素,自動去重unordered_set<int> st(nums1.begin(), nums1.end());// 用于存儲結果的集合,保證結果中的元素唯一unordered_set<int> result;// 遍歷nums2中的每個元素for(int i = 0; i < nums2.size(); i++) {// 檢查當前元素是否存在于nums1中(即是否在st集合中)if(st.find(nums2[i]) != st.end()) {// 如果存在,則將該元素加入結果集合result.insert(nums2[i]);}}// 將結果集合轉換為vector返回return vector<int>(result.begin(), result.end());}
};