LeetCode – Intersection of Two Arrays II (Java)

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

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

Java Solution 1

public int[] intersect(int[] nums1, int[] nums2) {
    HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
    for(int i: nums1){
        if(map.containsKey(i)){
            map.put(i, map.get(i)+1);
        }else{
            map.put(i, 1);
        }
    }
 
    ArrayList<Integer> list = new ArrayList<Integer>();
    for(int i: nums2){
        if(map.containsKey(i)){
            if(map.get(i)>1){
                map.put(i, map.get(i)-1);
            }else{
                map.remove(i);
            }
            list.add(i);
        }
    }
 
    int[] result = new int[list.size()];
    int i =0;
    while(i<list.size()){
        result[i]=list.get(i);
        i++;
    }
 
    return result;
}

Java Solution 2

If the arrays are sorted, then we can use two points.

public int[] intersect(int[] nums1, int[] nums2) {
    Arrays.sort(nums1);
    Arrays.sort(nums2);
    ArrayList<Integer> list = new ArrayList<Integer>();
    int p1=0, p2=0;
    while(p1<nums1.length && p2<nums2.length){
        if(nums1[p1]<nums2[p2]){
            p1++;
        }else if(nums1[p1]>nums2[p2]){
            p2++;
        }else{
            list.add(nums1[p1]);
            p1++;
            p2++;
 
        }
    }
 
    int[] result = new int[list.size()];
    int i=0;
    while(i<list.size()){
        result[i]=list.get(i);
        i++;
    }
    return result;
}
Category >> Algorithms  
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
<pre><code> 
String foo = "bar";
</code></pre>
  • Melad Ezzat

    public static int[] intersect2(int[] nums1, int[] nums2) {

    ArrayList list = new ArrayList();
    for (int i : nums1) {
    if(Arrays.binarySearch(nums2, i)!=-1){
    list.add(i);
    }
    }

    int[] result = new int[list.size()];
    int i = 0;
    while (i < list.size()) {
    result[i] = list.get(i);
    System.out.println(list.get(i) + ",");
    i++;
    }

    return result;
    }