美文网首页
每日一道算法题 - 求两个数组交集

每日一道算法题 - 求两个数组交集

作者: 辉_ace | 来源:发表于2021-12-12 21:57 被阅读0次

问题

给定两个数组,求两个数组的交集,并以数组形式输出。

思路

1)先排序再比较:先对两个数组进行排序,遍历两个数组中的值并比较,如果相同,则将该值放入集合中。如果不同,则较小值的下标自增并继续比较.
2)通过map进行记录:key为集合中的具体值,value为该值在集合中出现的次数。 先遍历nums1,并将值添加到map中,接着遍历nums2, 判断遍历得到的nums2中的每一个值是否在map中,如果在map中则添加到集合中。

实现

1)先排序再比较

public class InterSect {

    public static void main(String[] args) {

        int[] nums1 = new int[]{4,9,5};
        int[] nums2 = new int[]{9,4,9,8,4};

        int[] result = interSect(nums1,nums2);

        System.out.println(Arrays.toString(result));
    }

    private static int[] interSect(int[] nums1, int[] nums2) {

        /**
         * 对数组排序
         * 对两个数组中的值进行逐一比较,相同放入集合,
         * 如果nums1[i]<nums2[j] ->i++
         * 如果nums1[i]>nums2[j] ->j++
         */
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int i = 0;
        int j = 0;
        List<Integer> list = new ArrayList<>();

        while (i<nums1.length && j<nums2.length){

            if (nums1[i] == nums2[j]){
                list.add(nums1[i]);
                i++;
                j++;
            }else if (nums1[i]<nums2[j]){
                i++;
            }else if (nums2[j]<nums1[i]){
                j++;
            }
        }

        return list.stream().mapToInt(Integer::intValue).toArray();

    }
}
image.png

2)通过map记录

private static int[] interSect2(int[] nums1, int[] nums2) {
        //key 值  value 出现的次数
        Map<Integer,Integer> map = new HashMap<>();
        List<Integer> list = new ArrayList<>();

        //遍历nums1
        for (int i=0;i<nums1.length;i++) {
            map.put(nums1[i],map.getOrDefault(nums1[i],0)+1);
        }

        //遍历nums2
        for (int i=0;i<nums2.length;i++) {
            if (map.getOrDefault(nums2[i],0)>0){
                list.add(nums2[i]);
                map.put(nums2[i],map.getOrDefault(nums2[i],0)-1);
            }
        }

        return list.stream().mapToInt(Integer::intValue).toArray();
    }

相关文章

  • 每日一道算法题 - 求两个数组交集

    问题 给定两个数组,求两个数组的交集,并以数组形式输出。 思路 1)先排序再比较:先对两个数组进行排序,遍历两个数...

  • 【北京第十九天】

    2016.06.24 周五 算法题:求两个数组的交集,整理了五种思路。重新接触了堆排序,spring,beans,...

  • 算法题之--《寻找两个有序数组的中位数》

    这是LeetCode上的一道算法题 给定两个有序数组,求两个有序数组的中位数,要求时间复杂度O(log(m + n...

  • 数组求交集算法

    数组求交集的方法1.暴力搜索2.利用HashMap3.先排序再用两个指针查找4.位图法5.大文件求交集用分治法,组...

  • Javascript Array

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

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

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

  • 一道算法题之两个有序数组合并

    最近面试的时候遇到了一道算法题,两个有序数组合并,要求新的数组也是有序的 此题比较简单,主要是看数组元素进行对比,...

  • leecode刷题(6)-- 两个数组的交集II

    leecode刷题(6)-- 两个数组的交集II 两个数组的交集II 描述: 给定两个数组,编写一个函数来计算它们...

  • 随手写

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

  • 二分查找

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

网友评论

      本文标题:每日一道算法题 - 求两个数组交集

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