/**
* Sort the array,
* then use two pointer.
* Time O(nlongn)
*/
public class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
// using set to avoid duplicates
HashSet<Integer> set = new HashSet<Integer>();
// sort the arrays
Arrays.sort(nums1);
Arrays.sort(nums2);
int len1 = nums1.length, len2 = nums2.length;
int i = 0, j = 0;
while (i<len1 && j<len2) {
if (nums1[i] < nums2[j]) i++;
else if (nums1[i] > nums2[j]) j++;
else {
set.add(nums1[i]); // duplicates cannot be added to the set
i++; j++;
}
}
int[] result = new int[set.size()];
int k = 0;
for (int s : set)
result[k++] = s;
return result;
}
}
/**
* Two hashsets, one for saving unique numbers in nums1,
* the other for saving the intersection by:
* iterate nums2 if nums2[i] is in the first hashset, add it to the result.
* Time complexity O(n)
*/
public class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> unique_nums1 = new HashSet<Integer>();
HashSet<Integer> hs_ret = new HashSet<Integer>();
for (int num1 : nums1)
unique_nums1.add(num1); // hashset doesn't allow duplicates
for (int num2 : nums2)
if (unique_nums1.contains(num2)) // found an intersection
hs_ret.add(num2);
int[] ret = new int[hs_ret.size()];
int k = 0;
for (int hsr : hs_ret)
ret[k++] = hsr;
return ret;
}
}
/** * Sort the array, * then use two pointer. * Time O(nlongn) */ public class Solution { public int[] intersection(int[] nums1, int[] nums2) { // using set to avoid duplicates