二分查找总结
前提:排序数组,无重复元素
1.写法有两种:左闭右闭、左闭右开
2.左闭右闭:
(1) while条件为left <= right,因为是闭区间,所以右边界是有意义的
(2) mid初始计算为(数组长度 - 1)对2整除
(3) if nums[mid] > target,右边界更新为 mid -1
class Solution: def search(self, nums: List[int], target: int) -> int: left, right = 0, len(nums) - 1 while left <= right: middle = (left + right) // 2 if nums[middle] < target: left = middle + 1 elif nums[middle] > target: right = middle - 1 else: return middle return -1
3.左闭右开:
(1) while条件为left < right,因为是开区间,右边界无意义
(2) mid初始计算为数组长度 对2整除
(3) if nums[mid] > target,右边界更新为mid
class Solution: def search(self, nums: List[int], target: int) -> int: left,right =0, len(nums) while left < right: mid = (left + right) // 2 if nums[mid] < target: left = mid+1 elif nums[mid] > target: right = mid else: return mid return -1
重点难点:区间边界的处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人