LintCode 数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode 数组相关的知识,希望对你有一定的参考价值。

两数组的交

 

两数组的交

样例: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 数组的主要内容,如果未能解决你的问题,请参考以下文章

lintcode50 数组剔除元素后的乘积

lintcode 主元素解决方法

lintcode-寻找旋转排序数组中的最小值 java 需复习

LintCode之主元素

LintCode 50. 数组剔除元素后的乘积

lintcode:排颜色 II