美文网首页
查找两个数组中的相同数

查找两个数组中的相同数

作者: 雪飘千里 | 来源:发表于2019-12-19 18:55 被阅读0次

题目:查找两个数组中的相同数

方案一:

最笨的办法莫过于双重循环了,这种我们并不考虑,因为时间复杂度是N*N;

方案二:

如果只用数组的话,可以采用先排序,然后再用两个指针顺序找,只需要一次循环就可以。

public static Set<Integer> findCommon(int[] arr1, int[] arr2) {
        Set<Integer> set= new HashSet<>();
        if (arr1 == null || arr2 == null || arr1.length == 0 || arr2.length == 0) {
            return set;
        }
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        int i = 0, j = 0;
                //循环完成任何一个数组就结束
        while ( i < arr1.length && j < arr2.length ) {
                        //这种算法会导致有重复值,所以才需要用到HashSet去重
            if(arr1[i] == arr2[j]){
                set.add(arr1[i]);
                i++;
                j++;
                continue;
            }
            if(arr1[i] < arr2[j]){
                i++;
            }else {
                j++;
            }
        }
        return list;
    }

    public static void main(String[] args) {
        int a[] = {1,1,1,1,3,5,6,8,9};
        int b[] = {1,1,3,5,7,10,12};

        Set<Integer> result = findCommon(b,a);
        for (int i : result){
            System.out.print(i+",");
        }
    }

方案三:

采用HashMap,key为数组中值,value>1的为重复值。
需要先去重,然后循环一次就可以。

public static Set<Integer> findCommon2(Integer[] arr1, Integer[] arr2){
        Set<Integer> list = new HashSet<>();
        if (arr1 == null || arr2 == null || arr1.length == 0 || arr2.length == 0) {
            return list;
        }
        String[] strArray= new String[]{"Tom", "Bob", "Jane"};


        Set<Integer> set1 = new HashSet<>(Arrays.asList(arr1));
        Set<Integer> set2 = new HashSet(Arrays.asList(arr2));
        Map<Integer,Integer> map = new HashMap<>();


        Iterator<Integer> its1 = set1.iterator();
        Iterator<Integer> its2 = set2.iterator();
        int key1 = 0;Integer key2 = 0;
        while( its1.hasNext() || its2.hasNext()){
            if(its1.hasNext() && its2.hasNext()){
                key1 = its1.next();
                key2 = its2.next();
                map.put(key1, map.get(key1)==null?1:map.get(key1)+1);
                map.put(key2, map.get(key2)==null?1:map.get(key2)+1);
            }else if (its1.hasNext() ) {
                key1 = its1.next();
                map.put(key1, map.get(key1)==null?1:map.get(key1)+1);
            } else if (its2.hasNext()) {
                key2 = its2.next();
                map.put(key2, map.get(key2)==null?1:map.get(key2)+1);
            }
        }


        Set<Integer> keys = map.keySet();
        Iterator<Integer> its = keys.iterator();
        while (its.hasNext()){
            Integer key = its.next();
            if(map.get(key)>1){
                list.add(key);
            }
        }
        return list;
    }

    public static void main(String[] args) {
        Integer a[] = {1,1,1,1,3,5,6,8,9};
        Integer b[] = {1,1,3,5,7,10,12};

        Set<Integer> result = findCommon2(b,a);
        for (int i : result){
            System.out.print(i+",");
        }
    }

相关文章

  • 查找两个数组中的相同数

    题目:查找两个数组中的相同数 方案一: 最笨的办法莫过于双重循环了,这种我们并不考虑,因为时间复杂度是N*N; 方...

  • 剑指offer

    二维数组中查找数在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到...

  • ios方法实现查找两个数组中相同数o(n)

    NSArray *array1 = @[@7,@1,@77,@2,@0,@9,@56]; NSArray *a...

  • indexOf()和lastIdexOf()方法

    这两个方法都是用来查找目标项在数组中的位置,并在没找到目标数的情况下返回-1 indexOf(num) 作用:从数...

  • 剑指Offer二维数组查找

    剑指Offer二维数组查找 二维数组查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到...

  • 查找

    查找 折半查找: 面试题: 给定一个有序的数组,如果往该数组中存储一个数,并保证这个数组还是有序的,那么这个元素的...

  • JinLou-C++day06

    数组 所谓数组,就是⼀个集合,⾥⾯存放了相同类型的数据元素特点1:数组中的每个数据元素都是相同的数据类型特点2:数...

  • 查找数组中倒数第二小的数

    问题描述:查找数组中倒数第二小的数要求时间复杂度为O(n)。 解题思路 定义一个长度为2的数组arr,用来存放两个...

  • LeetCode 268. Missing Number

    三种方法1、异或操作。因为两个相同的数异或之后等于零,所以将数组与0到n异或,最后剩下的那个数就是数组中缺失的数。...

  • 数据结构

    es6方法过滤掉两个数组中对象id值相等的项 es6取两个数组的相同项 filter 过滤两个数组中相同的项 JS...

网友评论

      本文标题:查找两个数组中的相同数

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