80.两个数组的交集 II

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

/*
解法
双指针运行

先让两个数组排序,设置双指针分别从小到大遍历
每次判断指针小的,使其右移,相同时加到结果数组中
时间复杂度O(m log m +n log n)
*/
class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        ArrayList<Integer> ans=new ArrayList<Integer>();//设置动态数组不用提前录入两个数组相同数字的个数
        int i=0,j=0;
        while(i<nums1.length&&j<nums2.length)//当有一个指针超出范围时遍历结束
        {
            if(nums1[i]>nums2[j]) j++;
            else if(nums1[i]<nums2[j]) i++;
            else if(nums1[i]==nums2[j]){
            ans.add(nums1[i]);
            j++;
            i++;
            }
        }
        //原本我打算直接输出ans的,但是系统报错说是应该输出int[]类型,而不该是List<Integer> 
        //所以我又创建一个数组res,将ans的值遍历给他
        int[] res = new int[ans.size()];
        i = 0 ;
        for(int k : ans){
            res[i] = k;
            i++;
        }
        return res;
    }
}

 

posted @ 2022-03-20 10:28  随遇而安==  阅读(39)  评论(0编辑  收藏  举报