int a[10]={1,2,2,2,2,3,4,5},len=8;
int binarySearch(int k){
int left=0;
int right=len-1;
while(left<=right){
int mid=left+((right-left)>>1);//其实也就是(left+right)/2
if(a[mid]==k){
return mid;
}
else if(a[mid]<k){
left=mid+1;
}
else if(a[mid]>k){
right=mid-1;
}
}
return -1;
}
查找等于k的第一个数的位置
int binarySearch(int k){
int left=0;
int right=len-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(a[mid]>=k){
right=mid-1;
}
else if(a[mid]<k){
left=mid+1;
}
}
if(left<len&&a[left]==k){
return left;
}
return -1;
}
查找等于k的最后一个数的位置
int binarySearch(int k){
int left=0;
int right=len-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(a[mid]>k){
right=mid-1;
}
else if(a[mid]<=k){
left=mid+1;
}
}
if(right>=0&&a[right]==k){
return right;
}
return -1;
}
查找>=k的第一个数
int binarySearch(int k){
int left=0;
int right=len-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(a[mid]>=k){
right=mid-1;
}
else{
left=mid+1;
}
}
return left;//这里改成return right则是查找<k的最后一个数
}
查找>k的第一个数
int binarySearch(int k){
int left=0;
int right=len-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(a[mid]>k){
right=mid-1;
}
else{
left=mid+1;
}
}
return left;//这里改成return right则是查找<=k的最后一个数
}
查找<=k的最后一个数
int binarySearch(int k){
int left=0;
int right=len-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(a[mid]>k){
right=mid-1;
}
else{
left=mid+1;
}
}
return right;
}
查找<k的最后一个数
int binarySearch(int k){
int left=0;
int right=len-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(a[mid]>=k){
right=mid-1;
}
else{
left=mid+1;
}
}
return right;
}