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

数组第二大元素求解代码异常求助:返回结果为largest而非second largest

数组第二大元素获取逻辑的问题排查

问题描述

我在不考虑时间复杂度与空间复杂度的前提下,尝试实现数组中第二大元素的获取逻辑:先找到数组的最大元素(largest),将其与数组首个元素交换,再复用查找最大元素的逻辑来获取第二大元素(second largest)并存储在secondLargest变量中。但实际返回的仍是最大元素,而非预期的第二大元素,恳请帮忙排查问题。

原代码

public static int secondLargest(int[] arr, int size)
{
    int largest= arr[0];
    for(int i=1; i<size; i++)
    {
        if(arr[i]> largest)
        {
            largest= arr[i];
        }
        
        
    }
     if(largest!= arr[0])
     {
        int temp= arr[0];
        arr[0]= largest;
        largest = temp;
     }
     int SecondLargest = arr[1];
     for(int i=2; i<size; i++)
     {
         if(arr[i]> SecondLargest)
         {
             SecondLargest= arr[i];
         }
         
     }
     return SecondLargest;
}

问题分析

  • 交换逻辑存在歧义:仅记录最大值的数值而非位置,交换后数组中若存在多个与最大值相等的元素,这些元素仍会留在原位置,后续查找时会被误判为第二大元素。
  • 第二大元素初始化与遍历逻辑缺陷:用arr[1]初始化SecondLargest并从i=2开始遍历,若arr[1]本身就是最大值(比如数组存在多个最大值),或遍历中遇到其他最大值元素,最终返回的还是最大值。
  • 未排除最大值干扰:查找第二大元素时,没有跳过已移到数组首位的最大值,也未过滤数组其他位置的最大值元素。

修复方案

以下是修正后的代码,解决了上述问题:

public static int secondLargest(int[] arr, int size) {
    // 第一步:找到最大值的索引,确保交换位置准确
    int largestIndex = 0;
    for (int i = 1; i < size; i++) {
        if (arr[i] > arr[largestIndex]) {
            largestIndex = i;
        }
    }
    // 将最大值交换到数组开头
    int temp = arr[0];
    arr[0] = arr[largestIndex];
    arr[largestIndex] = temp;
    
    // 第二步:查找第二大元素,排除开头的最大值
    int secondLargest = Integer.MIN_VALUE;
    for (int i = 1; i < size; i++) {
        // 严格查找小于最大值的最大元素(若允许第二大等于最大值,可去掉arr[i] < arr[0]判断)
        if (arr[i] > secondLargest && arr[i] < arr[0]) {
            secondLargest = arr[i];
        }
    }
    
    return secondLargest;
}

修复说明

  1. 记录最大值索引:通过索引定位最大值,确保交换操作准确将最大值移到数组首位,避免仅记录数值导致的交换歧义。
  2. 正确初始化第二大元素:用Integer.MIN_VALUE初始化,避免数组前几个元素都是最大值时的初始化错误。
  3. 排除最大值干扰:遍历数组后续元素时,仅考虑小于最大值的元素,确保找到真正的第二大元素;若需求允许第二大元素等于最大值(数组存在多个最大值的场景),可移除arr[i] < arr[0]的判断条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:45:35