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

LeetCode 852题代码超时求助:山峰数组峰值索引代码为何超时?

问题排查与修复

你的代码触发超时的核心原因是循环内未更新mid的值:

  • 你仅在循环外部初始化了一次mid,但每次循环中s或e的取值都会变化,却没有重新计算新的mid,导致程序陷入死循环,最终触发超时。

此外代码还存在潜在的数组越界风险:当mid为数组首元素(索引0)或尾元素(索引arr.size()-1)时,访问arr[mid-1]或arr[mid+1]会越界,虽然题目保证输入是合法山峰数组,但逻辑上存在漏洞。

修复后的代码

class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        int s = 0;
        int e = arr.size() - 1;

        while (s < e) {
            int mid = s + (e - s) / 2; // 每次循环重新计算mid
            if (arr[mid] < arr[mid + 1]) {
                s = mid + 1;
            } else {
                e = mid;
            }
        }
        return s; // 循环结束时s==e,即为峰值索引
    }
};

修复说明

  1. 将mid的计算移至while循环内部,确保每次循环都根据最新的s和e更新中间位置,彻底解决死循环问题。
  2. 简化判断逻辑:利用题目输入为合法山峰数组的前提,仅通过arr[mid]与arr[mid+1]的比较,即可确定峰值所在区间,无需额外判断左右两侧。
  3. 调整循环条件为s < e,最终s与e会收敛到峰值索引,直接返回即可,逻辑更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:10:06