一、引言
二分法其实是在一串数字中查找需要的数字,我们将一串数字有按大小排序。用第一项位置加最后一项位置除以2,得到中位数,我们再将中位数和需要查找的数值的大小进行对比,再缩小一半的查询范围,重复以往可以最终锁定一个极小的范围。
二、列如:
将1到100进行规则的排序,找出一个随机的数值。这时我们可以遍历1到100,但是计算机的效率会大大增加。使用二分法,可以在一定范围内快速的寻找到数值的范围,并且来定位。
三、代码
class Solution:
def search(self, nums: List[int], target: int) -> int:
shang,xia=0,len(nums)-1
while shang<=xia:
mid=(shang+xia)//2 #获取中位数
if nums[mid]<target: #如果中位数小于查找值,则锁定后半段
shang=mid+1
elif target<nums[mid]: #如果中位数大于查找值,则锁定前半段
xia=mid-1
else:
return mid
return -1
四、解决思路
在给定了一串列表中,首先我们得判断是否是按照大小规则的排列,找出首位的下标和末位的下标相加除2,得到中位下标(可以得到中位数的值)。我们将中位数和需要求的数值进行大小的对比,舍弃对中位数的前一半查找,反之则舍弃对后一半范围查找,达成开方效果,同时在新的查找范围重新计算出中位数,重复循环得到范围。但求的值为整数,直接确定数值。