【问题标题】:Find 2nd largest int in a ArrayList [duplicate]在 ArrayList 中查找第二大 int [重复]
【发布时间】:2020-04-22 18:36:30
【问题描述】:

我正在创建一个方法,该方法将接收 ArrayList 的值并返回第二大 int。我不能使用排序机制来更改 ArrayList。这是我到目前为止所拥有的:

public static int secondLargestInt(ArrayList<Integer> arr) {
    int max = arr.get(0);
    int max2 = arr.get(0);
    for(int i = 1; i < arr.size(); i++) {
        if(arr.get(i) > max) {
            max2 = max;
            max = arr.get(i);
        }
        if(arr.get(i) > max2 && arr.get(i) != max) {
            max2 = arr.get(i);
        }
    }
    return max2;
}

我的方法似乎适用于大多数测试用例,除了 [100, 1, 2, 3, 4, 5] 的输入 预期输出:5

我的输出:100

【问题讨论】:

    标签: java


    【解决方案1】:

    您必须将 max2 初始化为比您能找到的任何值都低的值,MIN_VALUE 非常适合。

    int max2 = Integer.MIN_VALUE;
    

    为了简化一点,您可以将两者都初始化为 MIN_VALUE 并使用 for-each 循环避免索引

    public static int secondLargestInt(List<Integer> arr) {
        int max = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE;
        for (Integer value : arr) {
            if (value > max) {
                max2 = max;
                max = value;
            } else if (value > max2 && max > value) {
                max2 = value;
            }
        }
        return max2;
    }
    

    【讨论】:

      【解决方案2】:

      maxmax2 的起始值是索引 0 处的值,在您的示例中也是绝对最大值。因此,没有其他元素比它们中的任何一个都大,它们仍然是 100。您可以按照建议为两者分配最小整数值,但更有效的是简单地做

      int max = Math.max(arr.get(0), arr.get(1));
      int max2 = (max == arr.get(0)) ? arr.get(1) : arr.get(0);
      

      这样你已经检查了前两个元素,并且可以从第三个开始迭代。更重要的是 - 我相信这样代码的意图会更清晰。

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2013-10-17
        • 2018-04-07
        • 2017-01-04
        • 1970-01-01
        • 2016-01-05
        • 2011-11-09
        相关资源
        最近更新 更多