提示:熟能生巧
一、二分法
理解:把答案所在的区间逐渐缩小,直到区间内只有答案 基础了解: Array.toString() 打印数组 将数组转化为String类型的输出 sort()对数进行i排序 默认是升序 适用:寻找一个数,寻找左侧边界,寻找右侧边界 注意: 计算时为了防止数组溢出,mid=left+(right-left)来表示
二、应用:三种情况讨论
1.寻找一个数
代码如下(示例):
int Binarysearch(int a[],int target)
{
int left=0;
int right=a.length-1;
while(left<=right)
{
int mid = left+(right-left)/2;
if(a[mid] == target)
{
return mid;
}
if(a[mid]>target)
{
right = mid-1;
}
if(a[mid]<target)
{
left = mid+1;
}
}
return -1;
}
2.寻找左侧边界
代码如下(示例):
int left_search(int a[],int target)
{
int left =0;
int right = a.length;
while(left<right)
{
int mid = left+(right-left)/2;
if(a[mid]==target)
{
right = mid;
}
if(a[mid]<target)
{
left=mid+1;
}
if(a[mid]>target)
{
right=mid;
}
}
return left;
}
3.寻找右侧边界
int right_search(int a[],int target)
{
int left =0;
int right = a.length;
while(left<right)
{
int mid = left+(right-left)/2;
if(a[mid]==target)
{
left = mid+1;
}
if(a[mid]<target)
{
left=mid+1;
}
if(a[mid]>target)
{
right=mid-1;
}
}
return left-1;
}
|