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如果数组仅包含相同的数字,它也将返回。
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
编辑:
哎呀 谢谢你们指出我的错误。立即修复。
TA贡献1821条经验 获得超6个赞
如果将first_highest最初设置为的第一个元素已经是最高元素,则在找到下一个元素时应将其重新分配给新元素。就是说,它被初始化为98,应该被设置为56。但是,56并不高于98,因此除非您进行检查,否则它不会被设置。
如果最高编号出现两次,则将导致第二个最高值,而不是对数组进行排序时会找到的第二个元素。
添加回答
举报