350.两个数组的交集 II

题目描述

给定两个数组,编写一个函数来计算它们的交集。

示例1

  • 输入:nums1 = [1,2,2,1],nums2 = [2,2]
  • 输出:[2,2]

示例2

  • 输入:nums1 = [4,9,5],nums2 = [9,4,9,8,4]
  • 输出:[4,9]

说明

  • 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
  • 我们可以不考虑输出结果

题解

思路类似于二分查找。先将nums1和nums2数组升序排序,设置两个指针i和j分别指向nums1和nums2。如果两个指针指向的元素相同,就将该元素加入交集;如果某个指针指向的元素大于另一个指针指向的元素,就把指向较小元素的指针后移,直至两个指针指向的元素相等。

代码如下

class Solution {
public:
    vector intersect(vector& nums1, vector& nums2) {
        vector inter;
        if(nums1.size() == 0 || nums2.size() == 0) //判断是否有空数组
            return inter;
        sort(nums1.begin(), nums1.end()); //升序排序
        sort(nums2.begin(), nums2.end()); //升序排序
        int i = 0;
        int j = 0;
        while(i < nums1.size() && j < nums2.size())
        {
            if(nums1[i] == nums2[j])
            {
                inter.push_back(nums1[i]); //两数组元素相等,加入交集
                i++;
                j++;
            }
            else if(nums1[i] > nums2[j]) //nums1中的元素大于nums2中的元素,指向nums2的指针j后移
            {
                j++;
            }
            else //nums2中的元素大于nums1中的元素,指向nums1的指针i后移
            {
                i++;
            }
        }
        return inter;
    }
};

结果

出现的问题就是没有考虑到nums1和nums2为空数组的情况,当输入nums1 = [],nums2 = [] 的时候执行出错。
后加入了判断数组为空的语句:

 if(nums1.size() == 0 || nums2.size() == 0)
            return inter;
提交结果

你可能感兴趣的:(350.两个数组的交集 II)