350. Intersection of Two Arrays II

原创 2016年06月02日 11:39:06

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 num2'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?

Sort and two pointers Solution: Time: O(max(m, n) log(max(m, n))) Space: O(m + n)     Runtime: 12 ms

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        std::sort(nums1.begin(),nums1.end());  
        std::sort(nums2.begin(),nums2.end());  
        vector<int> res;  
        int len1=nums1.size();  
        int len2=nums2.size();  
        int i=0,j=0;  
        while(i<len1&&j<len2)  
        {  
            if(nums1[i]<nums2[j])  
                i++;  
            else if(nums1[i]>nums2[j])  
                j++;  
            else  
            {  
                res.push_back(nums1[i]);  
                i++;  
                j++;  
            }  
        }  
        return res;  
    }
};


hash table——unordered_map   Hash table solution: Time: O(m + n) Space: O(m + n)  Runtime: 12 ms


class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        unordered_map<int,int> m;
        vector<int> res;
        int len1=nums1.size();
        int len2=nums2.size();
        for(int  i=0;i<len1;i++)
            m[nums1[i]]++;
        for(int  i=0;i<len2;i++)
            if(--m[nums2[i]]>=0)
                res.push_back(nums2[i]);
        return res;    
    }
};


Hash table solution2: Time: O(m + n) Space: O(m)  Runtime: 12 ms


class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        unordered_map<int,int> m;
        vector<int> res;
        int len1=nums1.size();
        int len2=nums2.size();
        for(int  i=0;i<len1;i++)
            m[nums1[i]]++;
        for(int  i=0;i<len2;i++)
            if(m.find(nums2[i])!=m.end()&&--m[nums2[i]]>=0)
                res.push_back(nums2[i]);
        return res;    
    }
};






版权声明:更多请参考:http://blog.csdn.net/yangquanhui1991,我们一起每天进步一点点!

相关文章推荐

【Leetcode】350. Intersection of Two Arrays II

方法一: 思路: 用flag标记是否nums2中的该元素已经是相交的元素,若不是才加入结果list,并置flag为1然后跳出内层循环继续判断nums1的下一个元素。 public class Solu...

350. Intersection of Two Arrays II

Given two arrays, write a function to compute their intersection.Example: Given nums1 = [1, 2, 2, 1...

leetcode350~Intersection of Two Arrays II

Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2...

[leetcode] 350. Intersection of Two Arrays II

Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, ...

[LeetCode] 350. Intersection of Two Arrays II

[LeetCode] 350. Intersection of Two Arrays II 解题思路

<LeetCode OJ> 349 / 350 Intersection of Two Arrays(I / II)

Total Accepted: 3212 Total Submissions: 6814 Difficulty: Easy Given two arrays, write a functio...

Leetcode——350. Intersection of Two Arrays II

题目Given two arrays, write a function to compute their intersection.Example: Given nums1 = [1, 2, 2,...

350.[LeetCode]Intersection of Two Arrays

算法效率分析如下:// m n // 如果我用二分排序,那么时间就是 (nlogn + mlogm + m + n) // 但是用java的哈希表的话,时间可以缩短到 O(m+n),因为哈希表的插入时...

LeetCode-349&350.Intersection of Two Arrays

https://leetcode.com/problems/intersection-of-two-arrays/ Given two arrays, write a function to co...

leetcode解题之349 & 350. Intersection of Two Arrays Java版(求数组交集))

350. Intersection of Two Arrays II leetcode解题之349. Intersection of Two Arrays & 350. Intersection ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)