题目:
解答:
1 class Solution { 2 public: 3 vector<int> intersect(vector<int>& nums1, vector<int>& nums2) 4 { 5 if (nums1.size() > nums2.size()) 6 { 7 return intersect(nums2, nums1); 8 } 9 10 unordered_map<int, int> m; 11 for (auto n : nums1) 12 { 13 ++m[n]; 14 } 15 16 int k = 0; 17 for (auto n : nums2) 18 { 19 auto it = m.find(n); 20 if (it != end(m) && --it->second >= 0) 21 { 22 nums1[k++] = n; 23 } 24 } 25 return vector(begin(nums1), begin(nums1) + k); 26 27 } 28 };
1 class Solution { 2 public: 3 vector<int> intersect(vector<int>& nums1, vector<int>& nums2) 4 { 5 sort(begin(nums1), end(nums1)); 6 sort(begin(nums2), end(nums2)); 7 8 int i = 0; 9 int j = 0; 10 int k = 0; 11 while (i < nums1.size() && j < nums2.size()) 12 { 13 if (nums1[i] < nums2[j]) 14 { 15 ++i; 16 } 17 else if (nums1[i] > nums2[j]) 18 { 19 ++j; 20 } 21 else if (nums1[i] == nums2[j]) 22 { 23 nums1[k++] = nums1[i++]; 24 ++j; 25 } 26 } 27 return vector<int>(begin(nums1), begin(nums1) + k); 28 29 } 30 };