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

数组第二大唯一元素查找(无排序)Java代码逻辑问题排查

无排序实现数组第二大值查找的逻辑问题排查

我正在尝试实现数组中第二大数值的查找功能,希望能有人指出我现有代码遗漏了什么判断条件?
我清楚互联网上有很多该问题的现成解法,但我希望定位自己编写的无排序实现代码的逻辑缺陷(不使用排序方法),现有代码如下:

class Solution {
    int print2largest(int numbers[], int n) {
        if(n <= 1)
            return -1;
            
        int firstLargeNo = -1, secondLargeNo = -1;

        if(numbers[0] > numbers[1]) {
            firstLargeNo = numbers[0];
            secondLargeNo = numbers[1];
        }
        else {
            firstLargeNo = numbers[1];
            secondLargeNo = numbers[0];
        }
        
        for(int i = 2; i < numbers.length; i++) {
            if(numbers[i] > firstLargeNo) {
                secondLargeNo = firstLargeNo;
                firstLargeNo = numbers[i];
            }
            else if(firstLargeNo == secondLargeNo || numbers[i] > secondLargeNo)
                secondLargeNo = numbers[i];
        }
        
        if(firstLargeNo == secondLargeNo)
            return -1;
        
        return secondLargeNo;
    }
}

失败测试用例对应的正确输出结果:999


核心逻辑缺陷

你的代码漏了等值场景的判断,这也是测试用例跑失败的根本原因:
遍历过程中更新第二大值时,没有排除当前遍历值等于最大值的情况。
举个复现例子:如果数组内容为[1000, 999, 1000],遍历到第三个元素1000时,它不大于已记录的最大值firstLargeNo(1000),但会触发numbers[i] > secondLargeNo的判断(1000>999成立),直接把secondLargeNo错误更新为1000,最后会误判最大值和第二大值相等返回-1,但实际正确第二大值就是999,和你给出的预期输出完全匹配。

除此之外还有两个潜在隐患:

  • 初始值硬编码为-1存在兼容问题:如果数组中存在合法的-1元素,初始化逻辑会出现误判
  • 初始化前两个元素时没有处理相等的边界,虽然大部分场景能被后续遍历逻辑覆盖,但遇到特殊等值数组时容易出问题

修正方案

只需要在更新第二大值的分支上,新增「当前值不等于最大值」的判断即可,修正后的遍历核心代码如下:

for(int i = 2; i < numbers.length; i++) {
    if(numbers[i] > firstLargeNo) {
        secondLargeNo = firstLargeNo;
        firstLargeNo = numbers[i];
    }
    // 新增等值判断,过滤掉和最大值相等的元素
    else if(numbers[i] != firstLargeNo && (firstLargeNo == secondLargeNo || numbers[i] > secondLargeNo)) {
        secondLargeNo = numbers[i];
    }
}

如果需要兼容数组含-1的场景,可以把两个最大值变量的初始值设为Integer.MIN_VALUE,最后判断如果第二大值仍为初始值再返回-1即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:57:17