You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode中C++二分查找函数return语句失效问题排查

问题分析与解决

首先明确:你的return语句是正常生效的。在测试用例[-1,0,3,5,9,12]中找到目标值9后,函数会立刻返回,不会继续执行。你看到的“找到目标后仍继续运行”,是LeetCode的输出缓冲机制导致——cout的输出会先存在缓冲区,直到程序结束才批量打印,造成了函数还在运行的错觉。

真正导致超时的是你的二分查找逻辑存在致命错误,在部分场景下会进入死循环:

  • 当mid为1时,mid / 2等于0(整数除法特性),此时如果需要调整mid(比如目标值小于nums[mid]),mid -= 0不会改变mid的值,循环条件永远满足,程序无限运行直到超时。

修正后的代码

正确的二分查找需要维护左、右边界,通过调整边界来缩小查找范围,确保每次循环都能将范围减半:

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        // 当左边界不超过右边界时,继续查找
        while (left <= right) {
            // 计算中间位置,用left + (right-left)/2避免left+right溢出
            int mid = left + (right - left) / 2;
            if (nums[mid] == target) {
                return mid;
            } else if (target > nums[mid]) {
                // 目标在右半区,将左边界移到mid右侧
                left = mid + 1;
            } else {
                // 目标在左半区,将右边界移到mid左侧
                right = mid - 1;
            }
        }
        // 未找到目标值
        return -1;
    }
};

逻辑说明

  • 原代码直接修改mid的方式无法稳定缩小查找范围,容易出现死循环或跳过目标值的情况。
  • 维护left和right边界的方式,能确保每次循环都把查找范围缩小一半,时间复杂度稳定为O(log n),不会出现无限循环的问题。

内容的提问来源于stack exchange,提问作者Garik Mkrtchyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:30:36