import java.util.HashSet;
import java.util.Arrays;
class Solution {
/*
这道题其实可以不用二分查找,更多人使用双set集合,
把nums2的值全部输入一个set集合,遍历nums1看在set中是否存在,后面就一样了。
*/
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> res=new HashSet<>();
Arrays.sort(nums2);
for(int num : nums1){
if(BinarySearch(num,nums2)&&!res.contains(num)){
res.add(num);
}
}
int i=0;
int []result=new int [res.size()];
for(int item :res){
result[i++]=item;//之前没有自增造成了超时。
}
return result;
}
public boolean BinarySearch(int num,int []nums){
int left=0,right=nums.length-1;
while(left<=right){
int mid=(left+right)/2;//之前把这行代码放到了while循环外面,造成了超时
if(nums[mid]==num){
return true;
}else if(nums[mid]<num){
left=mid+1;
}else if(nums[mid]>num){
right=mid-1;
}
}
return false;
}
}
二分查找简单 349. 两个数组的交集
最新推荐文章于 2021-01-15 10:32:48 发布