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<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        vector<int> 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;
提交结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容