二分查找及其变种

# 标准二分查找
def merge_search( li , item ): #获取li的开始 结束 start = 0 end = len(li)-1 #只要start和end 还没错开 就一直找 while start <= end : #通过计算获取当前查找范围的中间位置 mid = (start + end)//2 #如果中间数就是item则返回True if li[mid] == item : return mid #如果mid比item大,说明item可能会出现在mid左边,对左边再查找 elif li[mid]> item : end = mid - 1 # mid 比item小,说明item有可能在mid右边,对右边再查找 else : start = mid + 1 #跳出循环说明没找到 返回错误 return False if __name__ == '__main__': li = [-1,0,3,5,9,12] print(merge_search(li , 9) ) #True
# 如果目标不在列表里,就返回比目标大的最小值
def nextGreatestLetter(letters, target): length = len(letters) # 循环的特殊情况 if letters[length - 1] <= target: return letters[0] start= 0 end= length - 1 while start< end: mid = (start+ end) // 2 letter = letters[mid] if letter == target: # 等于目标值,往右找 start= mid + 1 elif letter < target: # 比目标值小,往右找 start= mid + 1 else: # 比目标值大,可能就是要找的数! end= mid return letters[start] if __name__ == "__main__": letters = ["c", "f", "j"] target = "a" print(nextGreatestLetter(letters,target))

 

上一篇:万字长文爆肝Python基础入门【第二弹、超详细数据类型总结】


下一篇:golang解決分金幣問題