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

如何求数组中第二大数的平方?JavaScript代码遇NaN问题求助

问题原因分析

你遇到的问题根源在于用Set去重后,当输入数组所有元素都相同时,去重后的数组只有一个元素。比如[1,1]去重后变成[1],此时取索引1的元素自然是undefined,用Math.pow计算平方就会得到NaN。而你的需求里这种情况应该返回这个重复元素的平方,原代码没考虑到去重后数组长度不足2的场景。

解决方案

方案一:保留重复元素,直接遍历找第二大值

这种方法不用去重,更贴合“第二大”的实际语义(当所有元素相同时,第二大就是这个元素本身):

var maxArea = function(height) {
    const maxVal = Math.max(...height);
    // 初始化第二大值为负无穷,遍历数组找小于等于maxVal的最大值
    let secondMax = -Infinity;
    for (const num of height) {
        if (num <= maxVal && num > secondMax) {
            secondMax = num;
        }
    }
    // 如果所有元素都是maxVal,secondMax会等于maxVal
    return Math.pow(secondMax, 2);
};

方案二:改进原有的去重逻辑

如果你还是想用Set去重的思路,只需要加个判断,当去重后的数组长度小于2时,直接取唯一的元素即可:

var maxArea = function(height) {
    const uniqueArr = Array.from(new Set(height)).sort((a, b) => b - a);
    const secondLargest = uniqueArr.length >= 2 ? uniqueArr[1] : uniqueArr[0];
    return Math.pow(secondLargest, 2);
};

测试验证:

  • 输入[1,8,6,2,5,4,8,3,7],两种方案都返回49;
  • 输入[1,1],两种方案都返回1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:36:10