1、经典二分查找:跳出循环end在start右边
class Solution{
public int binarySearch(int[] arr,int target){
if(arr==null || arr.length==0){
return -1;
}
int start = 0,end= arr.length-1;
while(start<=end){
int mid = start + (end-start)/2;
if(arr[mid]==target){
return mid;
}else if(target<arr[mid]){
end = mid-1;
}else{
start = mid+1;
}
}
return -1;
}
}
2、常见的二分查找写法:跳出循环start=end,需要检查start or end是否等于target
class Solution{
public int binarySearch(int[] arr,int target){
if(arr==null || arr.length==0){
return -1;
}
int start = 0,end= arr.length-1;
while(start<end){
int mid = start + (end-start)/2;
if(arr[mid]==target){
return mid;
}else if(target<arr[mid]){
end = mid-1;
}else{
start = mid+1;
}
}
if(arr[start]==target){
return start;
}
return -1;
}
}
三、更加有用的二分查找模板:跳出循环,剩下2个数,需要检查start和end,特点是:区间缩小时包含mid
class Solution{
public int binarySearch(int[] arr,int target){
if(arr==null || arr.length==0){
return -1;
}
int start = 0,end= arr.length-1;
while(start+1<end){
int mid = start + (end-start)/2;
if(arr[mid]==target){
return mid;
}else if(target<arr[mid]){
end = mid;
}else{
start = mid;
}
}
if(arr[start]==target){
return start;
}else if(arr[end]==target){
return end;
}
return -1;
}
}