Intersection of Two Arrays

Question

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

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

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

Analysis

非常直观的解法就是利用HashMap,循环nums1[]一遍,记录下nums1[]中出现的数字,再对nums2[]做循环,如果在HashMap中出现过,则记录到最后的结果中。

此外也可以用先sort的方法,通过merge来保证结果unique。

Solution

// HashMap Approach
public class Solution {
    /**
     * @param nums1 an integer array
     * @param nums2 an integer array
     * @return an integer array
     */
    public int[] intersection(int[] nums1, int[] nums2) {
        HashMap<Integer, Boolean> map1 = new HashMap<Integer, Boolean>();
        HashMap<Integer, Boolean> intersectMap = new HashMap<Integer, Boolean>();
        for (int i = 0; i < nums1.length; i++) {
            if (!map1.containsKey(nums1[i])) {
                map1.put(nums1[i], true);
            }
        }
        for (int j = 0; j < nums2.length; j++) {
            if (map1.containsKey(nums2[j]) && !intersectMap.containsKey(nums2[j])) {
                intersectMap.put(nums2[j], true);
            }
        }
        int[] result = new int[intersectMap.size()];
        int i = 0;
        for (Integer e : intersectMap.keySet()) {
            result[i] = e;
            i++;
        }
        return result;
    }
}

Last updated

Was this helpful?