class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if(nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0)
return new int[0];
Arrays.sort(nums1);
HashSet<Integer> set = new HashSet<>();
for(int i = 0 ; i < nums2.length; i++){
if(binarySearch(nums1,nums2[i])){
//
set.add(nums2[i]);
}
}
int[] res = new int[set.size()];
int i = 0;
for(Iterator<Integer> it = set.iterator(); it.hasNext(); ){
res[i] = it.next();
i++;
}
return res;
}
public boolean binarySearch(int[] nums,int target){
int start = 0, end = nums.length - 1;
while(start + 1 < end){
int mid = start + (end - start)/2;
if(nums[mid] == target){
return true;
}
if(nums[mid] > target){
end = mid;
}else{
start = mid;
}
}
if(nums[start] == target || nums[end] == target){
return true;
}
return false;
}
}
双hashmap 时间复杂度 o(n)
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
//一开始不用判断
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0 ; i < nums1.length;i++){
map.putIfAbsent(nums1[i],1);
}
Map<Integer,Integer> res = new HashMap<>();
for(int i = 0; i < nums2.length;i++){
if(map.containsKey(nums2[i]) && !res.containsKey(nums2[i])){
res.put(nums2[i],1);
}
}
int[] result = new int[res.size()];
int index = 0;
for(int k : res.keySet()){
result[index++] = k;
}
return result;
}
}