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

Leetcode盛最多水的容器函数因console.log()输出异常求助

问题原因:console.log影响输出的真相

这是JavaScript中if语句缺少大括号导致的执行逻辑歧义,和console.log本身无关,只是它的存在改变了代码块的归属:

核心错误点

你的第一个if判断语句:

if((height[i]>highestBar||height[j]>highestBar)&&((i-j)>biggestGap))

后面没有加{},JavaScript的规则是:无大括号的if语句只会执行紧跟的第一行代码,后续代码不属于该if的执行范围。

两种情况的逻辑差异

  1. 保留console.log时
    console.log('enter');是if的唯一执行体,后面的两个if块是独立的,每次循环都会执行。此时temp会被正常赋值,maxAmt能正确计算出最大值2。

  2. 注释console.log时
    紧跟if的第一行代码变成了if(height[j]<=height[i]){...},这整段代码被纳入外层if的执行范围——只有外层if条件满足时,才会计算temp并更新maxAmt。而当外层if不满足时,temp未被初始化(值为undefined),此时if(maxAmt<temp)的比较结果为false,maxAmt无法得到正确更新,最终输出错误值1。

修复方案

给外层if加上大括号,明确指定执行块的范围:

let c = [1,2,1]

var myFunc = function(height) {
    let maxAmt=0
    let temp
    let highestBar = -1
    let biggestGap = -1
    for (let i = height.length-1;i>=0;i--){
        for(let j = i-1;j>=0;j--){
            // 加上大括号,明确执行范围
            if((height[i]>highestBar||height[j]>highestBar)&&((i-j)>biggestGap)){
                // console.log('enter');
                if(height[j]<=height[i]){
                    temp=height[j]*(i-j)
                } else if(height[j]>=height[i]){
                    temp=height[i]*(i-j)
                }
                if(maxAmt<temp){
                    maxAmt = temp
                    highestBar = Math.sqrt(maxAmt)
                    biggestGap = i-j
                }
            }
        }
    }
    console.log('max is '+maxAmt);
    return maxAmt
};

console.log(myFunc(c))

额外提醒

写JavaScript代码时,无论if块内只有一行还是多行,都建议加上大括号,避免这种因代码缩进产生的逻辑歧义,这是很常见的低级错误,但容易被忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:07:55