Intersection of Two Arrays

public class Solution {
    /**
     * @param nums1: an integer array
     * @param nums2: an integer array
     * @return: an integer array
     */
    public int[] intersection(int[] nums1, int[] nums2) {
        // write your code here
        
        if(nums1 == null || nums2 == null) {
            return null;
        }
        
        HashSet<Integer> resultHash = new HashSet<>();
        Arrays.sort(nums2);
        
        for(int i = 0; i < nums1.length; i++) {
            if(binarySearch(nums1[i], nums2) && !resultHash.contains(nums1[i])) {
                resultHash.add(nums1[i]);
            }
        }
        
        int[] result = new int[resultHash.size()];
        int index = 0;
        for(Integer num: resultHash) {
            result[index++] = num;
        }
        return result;
    }
    
    private boolean binarySearch(int target, int[] nums) {
        if(nums == null || nums.length == 0) {
            return false;
        }
        
        int start = 0, end = nums.length - 1;
        while(start + 1 < end) {
            int mid = (end - start) / 2 + start;
            if(nums[mid] == target) {
                return true;
            }else if (nums[mid] < target) {
                start = mid;
            }else {
                end = mid;
            }
        }
        
        if (nums[start] == target || nums[end] == target) {
            return true;
        }else {
            return false;
        }
    }
}

最后更新于

这有帮助吗?