要找到数组中第二高的元素,最好是对整个数组进行排序(冒泡排序),然后打印排序数组的第二高元素,或者我们应该找到数组的最高元素,删除它并再次查找最高元素(将是第二高元素)?
答案 0 :(得分:3)
您应该在数组中进行一次传递,随时跟踪两个最高元素。
答案 1 :(得分:1)
坦率地说,也不是。排序数组最多只能是O(nlog(n))操作(不要使用冒泡排序,BTW!)。遍历数组两次仍然是一个O(n)操作,但你可以节省大约一半的运行时间 - 你可以在一次通过中重复数组,然后存储第二高的数据。
请考虑以下内容(Java中为int
数组提供的示例,但应该可以轻松地翻译为任何其他语言或数据类型):
int secondHighest(int[] arr) {
// Assumption: There are at least two elements in the array
int highest;
int secondHighest;
if (arr[0] > arr[1]) {
highest = arr[0];
secondHighest = arr[1];
} else {
highest = arr[1];
secondHighest = arr[0];
}
for (int i = 2; i < arr.length; ++i) {
if (arr[i] >= highest) {
secondHighest = highest;
highest = arr[i];
} else if (arr[i] > secondHighest) {
secondHighest = arr[i];
}
}
return secondHighest;
}
答案 2 :(得分:0)
完全可以一次通过,顺便提高效率。您查找两个最高值并选择第二个值。
伪代码
INTEGER FINDSECONDHIGHEST (ARRAY A)
INTEGER FIRST = MINIMUM_INTEGER_VALUE_POSSIBLE
INTEGER SECOND = MINIMUM_INTEGER_VALUE_POSSIBLE
FOREACH INTEGER I IN A
IF I > FIRST THEN
SECOND = FIRST
FIRST = I
ELSE IF I > SECOND THEN
SECOND = I
END IF
END FOREACH
RETURN SECOND