二分法-二分查找中极易出错的点及其解决伪代码

发布时间:2023年12月28日

1.使用条件

针对一组单调(增、减)的数列

2.举例(附带步骤)

12 15 23 27 34 39 41 49 52 56

查找目标key:39 在哪个位置,就可以用二分查找

步骤一:把数列放到数组中,两个指针分别指向头和尾,mid=(left+right)/2

步骤二:判断key>a[mid],更新left=mid+1;然后更新mid,方法同步骤一

步骤三:判断key<a[mid],更新right=mid-1;然后更新mid,方法同步骤一

步骤四:key=a[mid];找到key了

3.代码易错点

(1)写while循环时,left < right 还是 left <= right

(2)if (number [middle] > target),更新右区间,那么right = middle 还是right = middle-1

4.循环不变量

?区间的定义可以理解为循环的不变量,在边界处理的时候要坚持区间开闭的原则

一般两种情况:[left,right]? 左闭右闭??[left,right) 左闭右开

5.左闭右闭 [left,right]?写法(伪代码)

left=0;

right?= num.size-1;

while ( left <= right ){

? ? middle = (left+right)/2;

? ? if( num [middle] > targrt )

? ? ? ? ? ? right = middle -1;

? ? else if (num[middle]? < target )

? ? ? ? ? ? left = middle+1;

? ? else return middle;

}

return? -1;

6.左闭右开?[left,right) 写法(伪代码)

left = 0;

right?= num.size;

while ( left <?right ){

? ? middle = (left+right)/2;

? ? if( num [middle] > targrt )

? ? ? ? ? ? right = middle;

? ? else if (num[middle]? < target )

? ? ? ? ? ? left = middle+1;

? ? else return middle;

}

return? -1;

文章来源:https://blog.csdn.net/qq_73886051/article/details/135271453
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。