使用二分查找法的要求:
- 数组有序
- 数组中无重复元素(因为如果存在重复元素,二分查找法返回的元素下表可能不唯一)
知识拓展:
round(num,len) python内建函数,将数字四舍五入
在Python中“/”表示浮点数除法,返回浮点结果,也就是结果为浮点数,
而“//”在Python中表示整数除法,返回不大于结果的一个最大的整数,结果向下取整。
print(round(3.7415926)) # 4
print(round(3.1415926, 3)) #3.142
print(5//3) # 1
print(5 / 2) # 2.5
print(5 // 2) # 2
print(-9 // 2) # -5
print(5 >> 1) # 2
print(-5 >> 1) # -3
print(int(5 / 2)) # 2
print(int(-5 / 2)) # -2
思路解析点击这里查看(参考:代码随想录):二分查找思路
闭区间
class Solution:
def search(self, nums: [], target: int) -> int:
left, right = 0, len(nums) - 1
while left <= right:
middle = (left + right) // 2
if nums[middle] < target:
left = middle + 1
elif nums[middle] > target:
right = middle - 1
else:
return middle
return -1
左闭右开区间
class Solution:
def search(self, nums: [], target: int) -> int:
if nums is None or len(nums)==0: #判断可有可无
return -1
l, r = 0, len(nums)
while (l<r):
m = round(l+(r-l)/2)
#或者 m = (l + r) // 2
#m = int((l + r) / 2)
if nums[m] == target:
return m
elif nums[m] > target:
r=m
else:
l=m+1
return -1
调用
nums=[1,3,5,6,10,14,19,26]
target=5
t= Solution().search(nums, target)
print(t) # 2