一、今日学习的资源题目链接https://leetcode.cn/problems/binary-search/视频讲解https://www.bilibili.com/video/BV1fA4y1o715二、自己看到题目的第一想法看到题目时首先注意到两个关键条件一是升序有序数组二是必须实现 O (log n) 时间复杂度。第一时间就想到了二分查找算法 —— 因为只有二分查找能在有序数组中以对数级复杂度高效查找暴力遍历的 O (n) 复杂度完全不符合要求。看到输入示例nums[-1,0,3,5,9,12]、target9直观判断核心是通过不断缩小查找范围定位目标先找数组中间元素和目标值比较后确定目标在左半区还是右半区重复这个过程直到找到或确定不存在。三、自己实现过程中遇到的困难mid 计算溢出问题最初写mid(leftright)/2测试小数组没问题但想到题目中数组长度最大为 10000若数组长度更大leftright可能超出 int 类型范围导致计算错误。后来改成midleft(right-left)/2才解决了溢出隐患。循环边界条件混淆一开始写while(leftright)测试示例 1 时出现错误。仔细分析后才明白当leftright时数组只剩一个元素仍需判断是否为目标值正确边界应该是while (leftright)。区间更新逻辑失误最初写leftmid或rightmid导致查找范围无法缩小陷入死循环。后来明确规则nums[mid]target时目标在右半区需leftmid1nums[mid]target时目标在左半区需rightmid-1才解决了这个问题。四、代码实现与测试结果代码实现测试结果五、今日收获心得彻底掌握了二分查找的核心逻辑有序是前提对数复杂度是核心理解了 “每次排除一半元素” 的高效性也明白这种算法仅适用于有序数组这是和暴力遍历最本质的区别。学会了关注代码的鲁棒性比如 mid 计算的防溢出处理看似是小细节却能避免严重的运行错误这在实际开发中非常重要。理清了二分查找的边界细节循环条件left right、区间更新left mid 1和right mid - 1是固定搭配理解背后的逻辑后就不会死记硬背能灵活应对类似的查找问题。