704. Binary Search - LeetCode
这道题是基础的二分查找,主要有两种写法:左闭右闭和左闭右开。
左闭右闭的搜索范围是[left, right],while循环里left == right的情况是合法的,比如[1, 1],所以if(nums[middle] > target),right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1
class Solution:
def search(self, nums: List[int], target: int) -> int:
# Left closed right closed
left = 0
right = len(nums) - 1
while left <= right:
middle = (left + right) // 2
if nums[middle] > target:
right = middle - 1
elif nums[middle] < target:
left = middle + 1
else:
return middle
return -1
左闭右开的搜索范围是[left, right),while循环里left == right的情况是不合法的,比如[1, 1),所以if(nums[middle] > target),right 要赋值为 middle,即:下一个查询区间不会去比较nums[middle]
class Solution:
def search(self, nums: List[int], target: int) -> int:
# Left closed right open
left = 0
right = len(nums)
while left < right:
middle = (left + right) // 2
if nums[middle] > target:
right = middle
elif nums[middle] < target:
left = middle + 1
else:
return middle
return -1
27. Remove Element - LeetCode
...