1. 程式人生 > 實用技巧 >二分查詢及其變種

二分查詢及其變種

# 標準二分查詢
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))