?????????力扣題目鏈接
????????二分查找算法使用前提:有序數組;數組內無重復元素
? ? ? ? 易錯點:
? ? ? ? 1.while循環的邊界條件:如到底是?while(left <?right)?還是?while(left <= right)
? ? ? ? 2.if條件后right,left的取值:到底是 right = middle - 1還是 right = middle?
? ? ? ? 二者取決于區間的使用:是左閉右閉還是左閉右開,如左閉右閉區間,left == right 符合區間
因此while循環使用while(left <= right);if條件后right的取值,if nums[middle] > target,則nums[middle]一定取不到target,則right = middle - 1
from typing import List
class Solution:def search(self, nums: List[int], target: int) -> int:left, right = 0, len(nums) - 1 # 定義target在左閉右閉的區間里,[left, right]while left <= right:middle = left + (right - left) // 2if nums[middle] > target:right = middle - 1 # target在左區間,所以[left, middle - 1]elif nums[middle] < target:left = middle + 1 # target在右區間,所以[middle + 1, right]else:return middle # 數組中找到目標值,直接返回下標return -1 # 未找到目標值#測試樣例
nums = [-1,0,3,5,9,12]
target = -1
#創建對象
s =Solution()
#調用該方法
print(s.search(nums,target))