[LeetCode]349. Intersection of Two Arrays

Binary Search很简单的一道题,但是犯了好多错误。

要求:再从头写一遍,要求一次bug-free AC.

https://leetcode.com/problems/intersection-of-two-arrays/description/


Given two arrays, write a function to compute their intersection.

Example:
Given nums1 = [1, 2, 2, 1]nums2 = [2, 2], return [2].

Note:

  • Each element in the result must be unique.
  • The result can be in any order.

1.Binary Search

public class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        if(nums1==null || nums2==null || nums1.length<1 || nums2.length<1)
            return new int[0];
        
        List<Integer> list = new ArrayList<>();
        Arrays.sort(nums2);        
        
        for(int i=0; i<nums1.length; i++){
            if(list.contains(nums1[i])) continue;
            
            int low=0, high=nums2.length-1;
            int mid=(high-low)/2+low;
            boolean find=false;
            while(low<=high){
                if(nums2[mid]==nums1[i])
                {find=true;break;}
                else if(nums2[mid]>nums1[i])
                    high=mid-1;
                else low=mid+1;
                mid=(high-low)/2+low;
            }
            
            if(find) list.add(nums2[mid]);
        }
        
        int n=list.size();
        int[] res=new int[n];
        for(int i=0; i<n; i++)
            res[i]=list.get(i);
        
        return res;
    }
}

while(low<=high)

high=mid-1;

low=mid+1;

以及还犯的错误有,直接令low=nums2[0], high=nums2[n-1];

总之今天不大正常。

还有,do{}while();后面要加分号


2、HashSet

public class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set = new HashSet<>();
        Set<Integer> intersect = new HashSet<>();
        for (int i = 0; i < nums1.length; i++) {
            set.add(nums1[i]);
        }
        for (int i = 0; i < nums2.length; i++) {
            if (set.contains(nums2[i])) {
                intersect.add(nums2[i]);
            }
        }
        int[] result = new int[intersect.size()];
        int i = 0;
        for (Integer num : intersect) {
            result[i++] = num;
        }
        return result;
    }
}


3、Sort both arrays, use two pointers

public class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set = new HashSet<>();
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int i = 0;
        int 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[] result = new int[set.size()];
        int k = 0;
        for (Integer num : set) {
            result[k++] = num;
        }
        return result;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值