两个数组的交集的问题

两个数组的集合的问题-1求重复的出现的数字,出现多次算一次

public static int[] intersection(int[] nums1, int[] nums2) {
    // write your code here
    if (nums1==null||nums2==null||nums1.length==0||nums2.length==0){
        return new int[]{};
    }
    HashSet<Integer> results= new HashSet<Integer>() ;
    HashMap<Integer,Boolean> res= new HashMap();//true代表有值
    for (int i=0;i<nums1.length;i++){
        res.put(nums1[i],true);
    }
    for (int i=0;i<nums2.length;i++){
        if (res.get(nums2[i])!=null&&res.get(nums2[i])==true){//null判断必须
            if (!results.contains(nums2[i]))
            {
                results.add(nums2[i]);
            }
        }
    }
    int[] ress = new int[results.size()];
    int i=0;
    Iterator iterator = results.iterator();
    while (iterator.hasNext()){
        ress[i++]=(int)iterator.next();
    }
    return ress;
}

两个数组的集合的问题-1求重复的出现的数字,出现多次算多次

public int[] intersection(int[] nums1, int[] nums2) {
     HashMap<Integer,Integer> recoder = new HashMap();//使用hashMap的性质来解决
     ArrayList<Integer> res = new ArrayList<>();//list缓存结果集
     for (int i=0;i<nums1.length;i++){
         recoder.put(nums1[i],recoder.get(nums1[i])==null?1:recoder.get(nums1[i])+1);
         //value的值可能取到的是null,所以给他一个判断,然后value表示出现的次数
     }

     for (int i=0;i<nums2.length;i++){
         if (recoder.get(nums2[i])!=null&&recoder.get(nums2[i])>0){
             res.add(nums2[i]);//加入到结果集中
             recoder.put(nums2[i],recoder.get(nums2[i])-1);//加入到结果集中,记录集的个数需要减去1
         }
     }
     int[] result = new int[res.size()];
     Iterator iterator = res.iterator();
     int i=0;
     while (iterator.hasNext()){
         result[i++]=(int)iterator.next();
     }
     return result;
 }
0%