350. Intersection of Two Arrays II

问题描述:找出两个数组中重复的数字。
思路:用map记录一个数组中数字出现的次数。从而得出另一个数组中重复的数字有哪些。
原答案:

    public int[] intersect(int[] nums1, int[] nums2) {
        Map<Integer,Integer> map=new HashMap<Integer,Integer>();
        for(int num:nums1){
            if(map.containsKey(num)){
                int t=map.get(num);
                map.put(num,++t);
            }else{
                map.put(num,1);
            }
        }
        List<Integer> list=new ArrayList<Integer>();
        for(int num:nums2){
            if(map.containsKey(num)&&map.get(num)>0){
                list.add(num);
                int t=map.get(num);
                map.put(num,--t);
            }
        }
        int size=list.size();
        int [] res=new int[size];
        for(int i=0;i<size;i++){
            res[i]=list.get(i);
        }
        return res;
    }

最佳答案:

    public int[] intersect(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);

        int i = 0; 
        int j = 0;
        int k = 0;

        int[] res = new int[Math.min(nums1.length, nums2.length)];
        while (i < nums1.length && j < nums2.length) {
            if (nums1[i] == nums2[j]) {
                res[k] = nums1[i];
                k++;
                i++;
                j++;
            } else if (nums1[i] < nums2[j]) {
                i++;
            } else {
                j++;
            }
        }
        return Arrays.copyOfRange(res, 0, k);

    }

首先可以对两个数组进行排序,排序完成后就可以一次遍历完成。其次,可以构建一个大数组,通过Arrays.copyOfRange取其中的部分数据。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011775905/article/details/79980424
个人分类: leetCode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

350. Intersection of Two Arrays II

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭