两个数组的交集

问题:

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

思路:先将数组排序,使用两个指针,遍历两个数组,当指针指向的的数字相同时,将数字放入第三个数组,如果指针1指向的数字大于指针2指向的数字,指针2自增,遍历条件是指针1小于数组1的长度,指针2小于数组2的长度

算法如下:

        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int p=0;
        int q=0;
        int count=0;

        //每有一个相同的元素,将两个元素在原数组中删除,(把相同的元素无视掉)
        // 并把元素放在第三个数组里

        int[] arr3=new int[Math.min(nums1.length,nums2.length)];
       while (p<nums1.length&&q<nums2.length){

            if(nums1[p]<nums2[q]){
                p++;

            }else if(nums1[p]>nums2[q]){
                q++;
            }else{
                arr3[count]=nums1[p];
                p++;
                q++;
                count++;
            }
        }

        return Arrays.copyOfRange(arr3,0,count);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值