如何获取数组中的第二大数字?已有最大值方法需完善次大值实现
如何实现数组的第二大值获取方法?
Hey,你已经搞定了最大值的方法,这点很棒!不过第二大值的实现确实需要多考虑一些细节,比如数组里全是重复最大值的情况、边界输入(比如数组长度不足),还有初始值设置的合理性,我来给你梳理几个可行的方案:
先优化你的最大值方法(可选但推荐)
你的highestNumber方法目前用固定值-999999初始化最大值,如果数组里全是比这个更小的负数(比如[-1000000, -2000000]),结果就会出错。建议改成用数组第一个元素初始化,同时加上边界校验:
public static int highestNumber(int []array1) { // 先处理空数组或null的情况 if (array1 == null || array1.length == 0) { throw new IllegalArgumentException("数组不能为空"); } int max = array1[0]; for (int i = 1; i < array1.length; i++) { if (array1[i] > max) { max = array1[i]; } } return max; }
方案一:两次遍历实现第二大值
这是最直观的思路:先找到最大值,再遍历数组找小于最大值的最大数,同时处理边界情况:
public static int secondHighest(int []array1) { // 校验数组长度至少为2 if (array1 == null || array1.length < 2) { throw new IllegalArgumentException("数组至少需要包含两个元素"); } int highest = highestNumber(array1); // 用Integer的最小值初始化,避免数组里全是负数的情况 int secondHighest = Integer.MIN_VALUE; for (int num : array1) { // 只找比最大值小,但比当前第二大值大的数 if (num < highest && num > secondHighest) { secondHighest = num; } } // 处理所有元素都等于最大值的情况(比如[5,5,5]) if (secondHighest == Integer.MIN_VALUE) { throw new IllegalArgumentException("数组中不存在第二大值(所有元素相同)"); } return secondHighest; }
方案二:一次遍历同时找最大值和第二大值(更高效)
如果数组很大,两次遍历会多花一倍时间,我们可以在一次遍历中同时跟踪最大值和第二大值,逻辑稍微复杂一点,但效率更高:
public static int secondHighest(int []array1) { if (array1 == null || array1.length < 2) { throw new IllegalArgumentException("数组至少需要包含两个元素"); } int highest = Integer.MIN_VALUE; int secondHighest = Integer.MIN_VALUE; for (int num : array1) { if (num > highest) { // 当前数比最大值大:把原来的最大值降级为第二大值,更新最大值 secondHighest = highest; highest = num; } else if (num < highest && num > secondHighest) { // 当前数介于最大值和第二大值之间:更新第二大值 secondHighest = num; } // 如果num等于最大值,直接跳过,不做处理 } // 同样处理所有元素相同的情况 if (secondHighest == Integer.MIN_VALUE) { throw new IllegalArgumentException("数组中不存在第二大值(所有元素相同)"); } return secondHighest; }
小提示
- 一定要加上边界校验,避免空数组、长度不足等情况导致的运行时错误;
- 用
Integer.MIN_VALUE代替固定负数初始化,能适配所有整数范围的输入; - 如果你的业务场景允许第二大值等于最大值(比如数组
[5,5,3],你想返回5),可以把判断条件里的num < highest改成num <= highest,但要注意调整逻辑避免初始值问题。
内容的提问来源于stack exchange,提问作者UnknownJ25
相关产品推荐
相关产品推荐

