学习目标:
学习二分法
学习内容:
学习二分法在程序中的使用
- 明白二分法的原理
- 明白二分法在程序中的写法
二分法对大量数据的时候,效率很高,复杂度为log(n)。
将一组数据分成两份,比较或者判断在数据在哪一边,就可以将原数据缩小一倍,再重复原来的操作,就可以找到数的位置。
这里就想到了高中数学老师讲的抓老鼠的方法。
假设有人告诉你一只老鼠(用黑点表示,表示我们要找到的数target)在一个盒子(确定范围[left,right])里面,我们手中有和盒子等长的木板 ,想把它抓住(困住)。
left = 0
right = len(nums)-1 # 确定范围
在盒子中间放上一块木板,老鼠必定在一边。
mid = left+(right-left)/2 # 找到中点
如果刚好被压到,就找到了
if target == nums[mid]:
return mid
如果没找到,就询问那个人判断老鼠在哪一边,将范围缩小到一半。
elif target > nums[mid]:
left = mid + 1
elif target < nums[mid]:
right = mid-1
比如现在左边,就在左边中间再放一块木板。
继续判断循环,直到老鼠被抓到为止。
但是如果木板都放不下去了,老鼠还没抓到,说明没有老鼠,那人是骗你的,循环也结束了,程序返回-1。
完整程序
class Solution(object):
def search(self, nums, target):
left = 0
right = len(nums)-1
while left<=right:
mid = left+(right-left)/2
if target == nums[mid]:
return mid
elif target > nums[mid]:
left = mid + 1
elif target < nums[mid]:
right = mid-1
return -1
学习时间:
2022年9月3日