一尘不染

Java 查找数组中第二高的数字

java

我很难理解在数组中找到第二大数字的方法背后的逻辑。所使用的方法是在数组中找到最高的,但小于先前最高的(已经找到)。我仍然不明白的是为什么|| highest_score == second_highest有必要。例如,我输入了三个数字:98、56、3。没有它,最高和第二高将都是98。请解释。

int second highest = score[0];  
if (score[i] > second_highest && score[i] < highest_score || highest_score == second_highest)   
    second_highest = score[i];

阅读 437

收藏
2020-03-22

共1个答案

一尘不染

找到第二高实际上很简单:

 static int secondHighest(int... nums) {
    int high1 = Integer.MIN_VALUE;
    int high2 = Integer.MIN_VALUE;
    for (int num : nums) {
      if (num > high1) {
        high2 = high1;
        high1 = num;
      } else if (num > high2) {
        high2 = num;
      }
    }
    return high2;
 }

这是O(N)一口气。如果你想接受联系,则更改为if (num >= high1),但是Integer.MIN_VALUE如果数组中至少有2个元素,它将返回。Integer.MIN_VALUE如果数组仅包含相同的数字,它也将返回。

2020-03-22