码迷,mamicode.com
首页 > 编程语言 > 详细

LintCode 数组(二)

时间:2016-07-03 19:01:01      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

两数组的交

 

两数组的交

样例:nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].

解答一:用两个HashSet

public int[] intersection(int[] nums1, int[] nums2) {
    Set<Integer> set = new HashSet<Integer>();
    Set<Integer> inter = new HashSet<>();
    for(int i=0; i<nums1.length; i++){
        set.add(nums1[i]);
    }
    for(int j=0; j<nums2.length; j++){
        if(set.contains(nums2[j])){
            inter.add(nums2[j]);
        }
    }
    int[] rst = new int[inter.size()];
    int k = 0;
    for(Integer s: inter){
        rst[k++] = s;
    }
    return rst;
}

 

解答二:对两个数组排序,然后各用一个指针遍历。

public int[] intersection(int[] nums1, int[] nums2) {
    Set<Integer> set = new HashSet<Integer>();
    Arrays.sort(nums1);
    Arrays.sort(nums2);
    int i=0, j=0;
    while(i<nums1.length && j<nums2.length){
        if(nums1[i]<nums2[j]){
            i++;
        }else if(nums1[i]>nums2[j]){
            j++;
        }else{
            set.add(nums1[i]);
            i++;
            j++;
        }
    }
    int[] arr = new int[set.size()];
    int k = 0;
    for(Integer s: set){
        arr[k++] = s;
    }
    return arr;
}

 

解答三:对num2排序,然后遍历num1中的数,在num2中进行二分查找,找到就放入set中。 

 

LintCode 数组(二)

标签:

原文地址:http://www.cnblogs.com/hesier/p/5638521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!