要查找数组的第二个最高元素,是排序整个数组(排序),然后打印排序数组的第二个最高元素,或者应该找到数组的最高元素,删除它并再次找到最高元素(这将是第二高元素)?第二最高元素
第二最高元素
回答
坦率地说,排序数组最好是O(nlog(n))操作(不要使用冒泡排序,顺便说一下)。遍历数组两次仍然是一个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;
}
您应该单程遍历数组,跟踪最上面的两个元素。
这将是一个好主意,陈述为什么这更好,其他则只是说明。 –
我认为一个新手不是大O或内存带宽的家庭,但可以:排序通常是O(N log N),冒泡排序是O(N^2),并且一旦降低常数因子通过它两次运行,并更容易缓存。 –
如果他们不这样做,你可以简单地说这种方式更有效率,因为它只是通过数组迭代一次/(两次),而排序将遍历数组多次。我之所以在思考,是因为他们知道他们之前可能看到过什么是泡沫。 –
它是在一次通过完全可能的,并且更有效的方式。你寻找最高的两个值,然后选择第二个值。
伪代码
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
- 1. 找到第二个最高的元素
- 2. 在列表中找到最高的第二个元素(Python)的
- 3. 加入第一+最后一个元素,第二+倒数第二个元素等为载体
- 4. Arraylist读取最后一个元素作为第二个最后一个元素
- 5. 从二进制最大堆中删除第二小元素
- 6. Python xpath,第二类元素
- 7. 第二边框元素
- 8. 浮动第二li元素
- 9. 第一个最后一个元素第二个变体
- 10. 找到第二个和第三个最大元素数组java
- 11. 中心两个元素(基于容器和第二个元素的高度IMG)
- 12. 打印第一元素或第二元素从文本文件
- 13. 第一个浮动元素与第二个浮动元素
- 14. 第二个兄弟div元素没有继承高度
- 15. 找到第二个最高值
- 16. 的Java:抓住第二个最高
- 17. 找到第二个最高有效位
- 18. R在第二列上选择最高计数单元
- 19. 给我最高的元素
- 20. python访问列表中的第二个元素到最后一个元素
- 21. Safari高度100%元素内的最大高度元素
- 22. 获取每个父元素的最高子元素的高度
- 23. 第一个元素点击显示第一个模态,第二个元素点击显示第二个模态
- 24. 第二节元素移动到第二行
- 25. 查找范围内的最大和第二大元素
- 26. 如何找到第二个最小的元素
- 27. 获得第二到最后一个元素的列表
- 28. 如何将第二个元素设置为最右边?
- 29. 获取最外层div元素(最高父元素)的HTML
- 30. 如何检查Python中一组值的最高,第二高,第三高等等?
第一个选项是更好的。使用'Array.sort'并打印第二个元素。也请提供必要的细节。 – Rajesh
找到最高的,然后是第二高的更好。因为它与'nlog(n)'的合并排序(或通常使用的快速排序)相比只是'O(n)'。 –
你可以参考下面的帖子http://stackoverflow.com/questions/2615712/finding-the-second-highest-number-in-array – Rajesh