查找数组中第二大的数字

新手上路,请多包涵

我很难理解在数组中找到第二大数字的方法背后的逻辑。使用的方法是在数组中找到最高但小于之前的最高(已经找到)。我仍然无法弄清楚的是为什么 || 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];

原文由 Richard Jackson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 463
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) ,但实际上,如果数组中没有至少 2 个元素,它将返回 Integer.MIN_VALUE 。它还将返回 Integer.MIN_VALUE 如果数组仅包含相同的数字。

原文由 polygenelubricants 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题