Given two arrays, write a function to compute their intersection.
Example:
Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2]
三种方法:
1.sort&merge
2.hashset
3.binary search
//binary search
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if(nums1==null||nums2==null){
return null;
}
//binary search
HashSet<Integer> set =new HashSet<>();
Arrays.sort(nums2);
for(int i=0;i<nums1.length;i++){
//put nums1 into nums2 to do binary search
if(set.contains(nums1[i])){
continue;
}
if(Bsearch(nums2, nums1[i])){
set.add(nums1[i]);
}
}
int[] result=new int[set.size()];
//put the set into result
int k=0;
for(Integer num:set){
result[k++]=num;
}
return result;
}
private boolean Bsearch(int[] nums,int target){
if(nums==null||nums.length==0){
return false;
}
int start=0,end=nums.length-1;
while(start+1<end){
int mid=start+(end-start)/2;
if(nums[mid]==target){
return true;
}
else if(nums[mid]<target){
start=mid;
}
else{
end=mid;
}
}
if(nums[start]==target){
return true;
}
if(nums[end]==target){
return true;
}
return false;
}
}