zoukankan      html  css  js  c++  java
  • [LintCode] Intersection of Two Arrays 两个数组相交

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

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

    Have you met this question in a real interview?
    Example

    Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].
    Challenge

    Can you implement it in three different algorithms?

    LeetCode上的原题,请参见我之前的博客Intersection of Two Arrays

    解法一:

    class Solution {
    public:
        /**
         * @param nums1 an integer array
         * @param nums2 an integer array
         * @return an integer array
         */
        vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
            set<int> s, res;
            for (auto a : nums1) s.insert(a);
            for (auto a : nums2) {
                if (s.count(a)) res.insert(a);
            }
            return vector<int>(res.begin(), res.end());
        }
    };

    解法二:

    class Solution {
    public:
        /**
         * @param nums1 an integer array
         * @param nums2 an integer array
         * @return an integer array
         */
        vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
            vector<int> res;
            int i = 0, j = 0;
            sort(nums1.begin(), nums1.end());
            sort(nums2.begin(), nums2.end());
            while (i < nums1.size() && j < nums2.size()) {
                if (nums1[i] < nums2[j]) ++i;
                else if (nums1[i] > nums2[j]) ++j;
                else {
                    if (res.empty() || res.back() != nums1[i]) {
                        res.push_back(nums1[i]);
                    }
                    ++i; ++j;
                }
            }
            return res;
        }
    };

    解法三:

    class Solution {
    public:
        /**
         * @param nums1 an integer array
         * @param nums2 an integer array
         * @return an integer array
         */
        vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
            set<int> res;
            sort(nums2.begin(), nums2.end());
            for (auto a : nums1) {
                if (binarySearch(nums2, a)) {
                    res.insert(a);
                }
            }
            return vector<int> (res.begin(), res.end());
        }
        bool binarySearch(vector<int> &nums, int target) {
            int left = 0, right = nums.size();
            while (left < right) {
                int mid = left + (right - left) / 2;
                if (nums[mid] == target) return true;
                else if (nums[mid] < target) left = mid + 1;
                else right = mid;
            }
            return false;
        }
    };

    解法四:

    class Solution {
    public:
        /**
         * @param nums1 an integer array
         * @param nums2 an integer array
         * @return an integer array
         */
        vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
            set<int> s1(nums1.begin(), nums1.end()), s2(nums2.begin(), nums2.end()), res;
            set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(res, res.begin()));
            return vector<int>(res.begin(), res.end());
        }
    };
  • 相关阅读:
    字符编码之间的转换 utf-8 , gbk等,(解决中文字符串乱码)
    信号分帧的三种实现方法及时间效率对比
    倒谱Cepstrum本质的理解
    Matlab 中 arburg 函数的理解与实际使用方法
    包络提取的两种方法-希尔伯特变换 和 局部峰值检测
    卡尔曼滤波的自我理解
    随机生成一个长度为n的数组
    JS 数字取整等操作
    vue 跳转路由新开页
    el-form 相关自定义校验
  • 原文地址:https://www.cnblogs.com/grandyang/p/5565633.html
Copyright © 2011-2022 走看看