ST数组:二分查找

力扣704二分查找
一、二分法易错点:
1、写while循环的时候,left<right还是left<=right?
2、if(nums[mid]>target)//此时需要更新右边界
(注:nums是数组,mid是下标,nums[mid]是数值 ,targe是目标数值)
那么问题在于,right=mid还是right=mid-1?
3、right=nums.length还是right=nums.length-1?
二、循环不变量
(有以下两种区间写法,都可以,但是选择那种区间写法,就自始至终选择这一种,不能混着用)
1、[left,right]左闭右闭
2、[left,right)左闭右开
三、左闭右闭写法

left=0
right=nums.size-1
while(left<=right){//对于左闭右闭区间,例如[1,1],1<=1是合法的,所以在这里是lef<=right
mid=(left+right)/2
if(nums[mid]>target){
right=mid-1//此时需要判断right=mid还是right=mid-1,由于上面if条件里面已经判断过了,mid肯定不是目标值所在的点,而右边又是闭区间,所以right=mid-1
}
else if(nums[mid]<target){
left=mid+1
}
else return mid;
}
return-1;

四、左闭右开写法

left=0
right=nums.size
while(left<right){//[1,1)这种情况下,说左区间可以小于右区间,但是不能等于右区间。
mid=(left+right)/2
if(nums[mid]>target){
right=mid
}
else if(nums[mid]<target){
left=mid+1//这里左边还是闭区间!!
}
else return mid;
}
return-1
posted @ 2026-01-09 00:16  琬六岁  阅读(1)  评论(0)    收藏  举报