二分查找理念:
左指针left 右指针right 和中间指针 mid = (left+right)//2 ,通过不断比较中间指针和所需查找的值的大小来调整指针位置。
注:需注意二分查找的范围 :【】 【) ()
和比较符号 >= > < <=
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| def lower_bound(nums: List[int], target: int) -> int: left, right = 0, len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] < target: left = mid + 1 else: right = mid - 1 return left
def lower_bound2(nums: List[int], target: int) -> int: left = 0 right = len(nums) while left < right: mid = (left + right) // 2 if nums[mid] < target: left = mid + 1 else: right = mid return left
def lower_bound3(nums: List[int], target: int) -> int: left, right = -1, len(nums) while left + 1 < right: mid = (left + right) // 2 if nums[mid] < target: left = mid else: right = mid return right
作者:灵茶山艾府 链接:https://leetcode.cn/problems/search-insert-position/solutions/2023391/er-fen-cha-zhao-zong-shi-xie-bu-dui-yi-g-nq23/ 来源:力扣(LeetCode)
|