为了账号安全,请及时绑定邮箱和手机立即绑定

查找数组中第二高的数字

查找数组中第二高的数字

婷婷同学_ 2019-12-04 10:46:06
我很难理解在数组中找到第二高数字的方法背后的逻辑。所使用的方法是在数组中查找最高的,但小于先前的最高(已经找到)。我仍然无法弄清的是为什么|| 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];
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

我不相信做您所做的事情可以解决问题。我认为这掩盖了您逻辑中的另一个问题。找到第二高实际上很简单:


 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如果数组仅包含相同的数字,它也将返回。


查看完整回答
反对 回复 2019-12-04
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

// Initialize these to the smallest value possible

int highest = Integer.MIN_VALUE;

int secondHighest = Integer.MIN_VALUE;


// Loop over the array

for (int i = 0; i < array.Length; i++) {


    // If we've found a new highest number...

    if (array[i] > highest) {


        // ...shift the current highest number to second highest

        secondHighest = highest;


        // ...and set the new highest.

        highest = array[i];

    } else if (array[i] > secondHighest)

        // Just replace the second highest

        secondHighest = array[i];

    }

}


// After exiting the loop, secondHighest now represents the second

// largest value in the array

编辑:

哎呀 谢谢你们指出我的错误。立即修复。


查看完整回答
反对 回复 2019-12-04
?
达令说

TA贡献1821条经验 获得超6个赞

如果将first_highest最初设置为的第一个元素已经是最高元素,则在找到下一个元素时应将其重新分配给新元素。就是说,它被初始化为98,应该被设置为56。但是,56并不高于98,因此除非您进行检查,否则它不会被设置。

如果最高编号出现两次,则将导致第二个最高,而不是对数组进行排序时会找到的第二个元素


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 398 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信