原文引用 大专栏 https://www.dazhuanlan.com/2019/08/26/5d6353ca4af56/
描述
给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1.
样例
在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2.
挑战
如果数组中的整数个数超过了2^32,你的算法是否会出错?
如果对二分查找比较陌生话,那么讲个小游戏,猜数字,在0-10000中随机取个数,让你猜,猜错了告诉你大了还是小了.
那么第一想法是什么?报中位数?对,不停的报中位数直到剩下最后一个数,这个数就是所需数,这个方法是比一个一个遍历要快非常多所需步骤也仅为log2n 回到正题
class Solution:
def binarySearch(self, nums, target):
# write your code here
start=0
end=len(nums)
mid=int(end/2)
while start<=end:
n_mid = nums[mid]
if n_mid <target: #right
start=mid+1
mid=int((end+start)/2)
elif n_mid >target: #left
end=mid-1
mid=int((end-start)/2)
else:
while nums[mid]==target:
mid-=1
return mid+1
return -1
参考于这篇做了一些修正,在没有重复的情况下,else的部分去除.直接return mid+1