美文网首页
两个升序整型数组求交集

两个升序整型数组求交集

作者: 雁阵惊寒_zhn | 来源:发表于2020-09-24 14:00 被阅读0次

下面是2020年9月16日面试遇到的一道真实面试题。

题目

求两个升序整型数组的交集。
例如:
数组A:1,2,3,4,5,6,7,8
数组B:2,4,6,10
结果:2,4,6

解题思路

假设数组A长度为m,数组B长度为n。
全部遍历两个数组,可以找到交集,不过时间复杂度为O(m*n)。这种方法没有用到数据升序的条件,这也是提升时间复杂度的关键。
两个数组存在升序,之后遍历的数组元素一定大于已经遍历过的元素,之前不是交集的元素未来也不会出现在交集中。
具体地,两个指针分别指向两个数组,分别顺序遍历,会出现三种情况:
情形1. A[i] == B[j]:此时找到一个交集元素,下次寻找时,i和j继续前进到下一个元素即可。
情形2. A[i] > B[j]:B[j]小,那么j自己要继续向前移动,找到下一个更大的元素,再与A[i]比较。
情形3. A[i] < B[j]:A[i]小,则i自己继续前进,找到下一个更大的元素,再与B[j]比较。

根据上面的思路,代码如下,时间复杂度为线性的O(m+n):

public int[] intersection(int[] arr1, int[] arr2){
    List<Integer> res = new LinkedList<>();
    //健壮性校验
    if (null == arr1 || arr1.length == 0){
        return arr2;
    }
    if (null == arr2 || arr2.length == 0){
        return arr1;
    }
    //i是数组arr1的下标,j是数组arr2的下标
    int j = 0, i = 0;
    while (j < arr2.length && i < arr1.length){
        if (arr1[i] == arr2[j]){//情形1
            res.add(arr1[i]);
            j++;
            i++;
        } else if (arr1[i] > arr2[j]){//情形2
            j++;
        } else{//情形3
            i++;
        }
    }
    //整理成数组返回交集
    int[] resA = new int[res.size()];
    for (int k = 0; k < res.size(); ++k){
        resA[k] = res.get(k);
    }
    return resA;
}

相关文章

  • 两个升序整型数组求交集

    下面是2020年9月16日面试遇到的一道真实面试题。 题目 求两个升序整型数组的交集。例如:数组A:1,2,3,4...

  • 算法-两个有序数组找交集

    有两个长度分别为m,n的升序数组,其中n> m*m,求这两个数组的交集,要求其复杂度尽可能低。如:数组a :-10...

  • 数据并集,交集,差集运算

    两个有序整型数组交集 两个有序数组并集 两个有序数组的差集

  • golang实现堆排序

    算法题:给定一个整型数组,将数组的中的元素按升序排序。 基本思路:操作:排序输入:无序整型数组输出:有序整型数组 ...

  • AFE问题

    两个包含100亿整型数据文件,10m内存,求交集?1.1 其中一个文件改成只有100个整型的话,还是求交集,怎么优...

  • Javascript Array

    数组常用方法 面试题 求两个数组的交集和差集 交集 差集

  • 2021-03-05富途社区C/C++后台一面

    两个有序数组求交集 两个数组A和B,A数组超大,内存装不下,求数组A和数组B的交集 字符串删空格 单向链表,给定链...

  • 随手写

    求两个递增数组的交集元素 小马过河 斗牛

  • 二分查找

    求整数根号Implement int sqrt(int x) 求两个数组交集Intersection of Two...

  • 求两个数组交集

    我的第一反应解法是这样的:const fun = ((arr1, arr2) => arr1.filter((i)...

网友评论

      本文标题:两个升序整型数组求交集

      本文链接:https://www.haomeiwen.com/subject/lqoeyktx.html