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; } |
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;
}