LeetCode(350)Intersection of Two Arrays II
阿新 • • 發佈:2019-01-10
題目
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2, 2]
.
Note:
- Each element in the result should appear as many times as it shows in both arrays.
- The result can be in any order.
Follow up:
- What if the given array is already sorted? How would you optimize your algorithm?
- What if nums1's size is small compared to nums2's size? Which algorithm is better?
- What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
分析
求含重複元素的兩陣列交集,同樣採用雜湊的思想,求交集同時更新元素個數。程式碼
GitHub原始碼#include <iostream> #include <cstdlib> #include <vector> #include <map> using namespace std; class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { if (nums1.empty() || nums2.empty()) return vector<int>(); int l1 = nums1.size(), l2 = nums2.size(); map<int, int> m; for (int i = 0; i < l1; ++i) { ++m[nums1[i]]; }//for vector<int> ret; for (int i = 0; i < l2; ++i) { if (m[nums2[i]] > 0) { ret.push_back(nums2[i]); --m[nums2[i]]; }//if }//for return ret; } }; int main() { vector<int> v1 = { 1,2,2,1 }, v2 = { 2,2 }; vector<int> ret = Solution().intersect(v1, v2); system("pause"); return 0; }