【第22期】观点:IT 行业加班,到底有没有价值?

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,我们一起每天进步一点点! 举报

相关文章推荐

350. Intersection of Two Arrays II

/* 350. Intersection of Two Arrays IIGiven two arrays, write a function to compute their intersectio...

350. Intersection of Two Arrays II -- 双指针、哈希表、排序、二分搜索

350. Intersection of Two Arrays IIGiven two arrays, write a function to compute their intersection.E...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

leetcode 350. 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

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

leetcode 350. Intersection of Two Arrays II

350. Intersection of Two Arrays II  My Submissions Question Editorial Solution Total Accepted: 44...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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