LeetCode

来源:互联网 发布:澳门mac专柜地址 编辑:程序博客网 时间:2024/06/06 13:19

349. Intersection of Two Arrays

Given two arrays, write a function to compute their intersection.

Example:
Given nums1 = [1, 2, 2, 1]nums2 = [2, 2], return [2].

Note:

  • Each element in the result must be unique.
  • The result can be in any order.

找出两数组中都包含的数,结果去重。

时间复杂度O(n),空间复杂度O(n)

class Solution {public:    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {        vector<int> ans;        if (nums1.empty() || nums2.empty()) return ans;        unordered_map<int, bool> vis;        for (auto x: nums1) {            vis[x] = true;        }        for (auto x: nums2) {            if (vis.find(x) == vis.end() || vis[x] == false) continue;            ans.push_back(x);            vis[x] = false;        }        return ans;    }};




350. Intersection of Two Arrays II

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?

找出两数组中重复的数,不去重。

时间复杂度O(n),空间复杂度O(n)

class Solution {public:    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {        vector<int> ans;        if (nums1.empty() || nums2.empty()) return ans;        unordered_map<int, int> vis;        for (auto x: nums1) {            vis[x]++;        }        for (auto x: nums2) {            if (vis.find(x) == vis.end() || vis[x] == 0) continue;            ans.push_back(x);            vis[x]--;        }        return ans;    }};