在一个1到100的列表中,如何最快找到目标数字,如果按照普通方法遍历,将所有数字都拿出来一一对比,那么最多需要100步。
而二分法每次都会从中间找起,每次都可以排除一半的数字,这样一来会大大减少对比次数,在100以内找到目标数只需要七步。
所以,二分法的关键在于如何找出中间数,100的中间数当然很好找,直接除2就行,但是如果目标数大于50,那么如何在50到100之间找出中间数?
首先我们要设置三个变量来表示1-100的答案范围,分别为:
//list为从1到100的列表
var mid = list.length/2
var low = 1
var high = 100
如果目标数大于50,那么应该将答案范围收缩至50-100,这时候就会发现,如果目标数大于中间数(answer > mid),就只有low的值改变。
那么反过来说,如果目标数小于中间数(answer < mid),那就只有high的值改变,因此判断代码应该是这样:
if(answer > mid){
low = mid
...
} else if(answer < mid){

二分法通过每次从中间查找并排除一半的可能性,显著减少了在有序列表中搜索目标值的时间复杂度。本文深入探讨了如何确定中间值,以及在目标值大于或小于中间值时如何调整搜索范围。通过设置low、mid和high变量,结合条件判断更新范围,并使用公式(high + low) / 2找到新的中间值,最终实现高效查找。示例展示了如何在1到100的列表中用七步找到目标数字。
最低0.47元/天 解锁文章
257

被折叠的 条评论
为什么被折叠?



