二分查找法:
百度百科:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
理解:
a.必须是顺序存储结构,必须有序
b.每次寻找范围内的中间值与目标值进行比较
c.从小到大的顺序中:
如果中间值小于目标值,则代表目标值的区间应该在右侧。
如果中间值大于目标值则代表目标值的区间应该在左侧
举例:
nums = [-1,0,3,5,9,12] # 有序,从小到大
target = 4 # 要找的目标数
具体代码如下:
class Solution(object):
def search(self, nums, target):
left = 0
right = len(nums) - 1
while left <= right:
mid = (left+right) // 2
if nums[mid] < target: # 代表target应该在右侧区间,则将左坐标右移到mid+1的位置
left = mid + 1
elif nums[mid] > target: # 代表target应该在左侧区间,则将右坐标左移到mid-1的位置
right = mid - 1
elif nums[mid] == target:
return mid
else:
return -1