diff --git a/problems/0704.二分查找.md b/problems/0704.二分查找.md index 27af3f49..a02bf7a2 100644 --- a/problems/0704.二分查找.md +++ b/problems/0704.二分查找.md @@ -204,18 +204,18 @@ class Solution { ```python class Solution: def search(self, nums: List[int], target: int) -> int: - left, right = 0, len(nums) - 1 - - while left <= right: - middle = (left + right) // 2 + left, right = 0, len(nums) - 1 # 定义target在左闭右闭的区间里,[left, right] - if nums[middle] < target: - left = middle + 1 - elif nums[middle] > target: - right = middle - 1 + while left <= right: + middle = left + (right - left) // 2 + + if 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 + return middle # 数组中找到目标值,直接返回下标 + return -1 # 未找到目标值 ``` (版本二)左闭右开区间 @@ -223,18 +223,18 @@ class Solution: ```python class Solution: def search(self, nums: List[int], target: int) -> int: - left, right = 0, len(nums) + left, right = 0, len(nums) # 定义target在左闭右开的区间里,即:[left, right) - while left < right: - middle = (left + right) // 2 + while left < right: # 因为left == right的时候,在[left, right)是无效的空间,所以使用 < + middle = left + (right - left) // 2 - if nums[middle] < target: - left = middle + 1 - elif nums[middle] > target: - right = middle + if nums[middle] > target: + right = middle # target 在左区间,在[left, middle)中 + elif nums[middle] < target: + left = middle + 1 # target 在右区间,在[middle + 1, right)中 else: - return middle - return -1 + return middle # 数组中找到目标值,直接返回下标 + return -1 # 未找到目标值 ``` **Go:**