class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
low, high = 0, len(nums)-1 # Note(1)
while low <= high: # Note(4)
mid = (right - left) // 2 + left # Note(5)
# mid = int((low + high) / 2)
if nums[mid] == target:
return mid
elif nums[mid] < target:
low = mid + 1 # Note(2)
else:
high = mid - 1 # Note(3)
return -1
思路虽然清楚,有三个细节体现了逻辑的重要性
Note(1)右侧指针是数组长度减去1
Note(2)左侧指针是中间指针减去1
Note(3)右侧指针是中间指针加上1
Note(4)执行循环的条件是左侧指针 小于等于 右侧指针,要有等于的情况
Note(2)(3)(4)三个条件合并起来保证了不会陷入死循环~~
Note(5)采用mid = (right - left) // 2 + left
它不会溢出,而mid = int((low + high) / 2)
在两个值是 int类型的最大值 和int类型的最大值减一 两个值相加就溢出了
被死循环卡住了