1.二分查找
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
二分查找一共有两种:
1)左闭右闭区间:
1.循环条件为while(left<=right),因为当此时left==right,是有意义的!!!
2.if(num[mid]>target) 右边界:right==mid-1,因为当前的num[mid]一定不是目标值,即查找范围是[mid-1,right];
int reach[int num[],int size,int target]
{
int left=0;
int right=size-1;//左闭右开区间
while(left<=right)
{
int mid=(left+right)/2;
if(num[mid]>target)//左区间
right=mid-1;
else if(num[num]<target)//右区间
left=mid+1;
else
return middle;//找到
}
return-1;//未找到
}
2)左闭右开区间
1)while(left<right) 因为此时left==right 无意义!!!!
int reach(int num[],int size,int target)
{
int left=0;
int right=size;
while(left<right)
{
int mid=(right+left)/2;
if(num[mid]<target)
right=mid;
else if(num[mid]>target)
left=mid+1;
else
return mid;
}
return -1;
}
以上是最基础的算法,接下来我们分析这道题:
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
这是对二分查找最简单的应用:左闭右闭
左闭右开算法
!!!不要自己改模版,我第一次就是自己改了模版