【发布时间】:2011-04-12 06:19:43
【问题描述】:
有没有一种方法可以在线性时间内找到数组的第二大元素? 数组元素可以是正数、负数或零。 元素可以重复。 不允许使用 STL。 可以使用 Python。
解决方案:对数组进行排序并取第二个元素,但不允许排序
修改:根据定义,第二大元素将是数值较小的元素。就像我们有
Arr = {5,5,4,3,1} 然后第二大是4
加法 可以说,如果我想将问题推广到第 k 个最大且复杂度小于 nlogn 之类的线性问题,那么解决方案是什么。
【问题讨论】:
-
为什么在线性时间可以在
n long n时间得到它? -
如果最大值重复,是否算作第二大值,还是我们选择它下面的那个?也就是说,在
3,4,5,5列表中,4或5是第二大元素吗? -
4 被认为是第二大元素。
-
@user1344784 请建议如何在
n logn中完成,谢谢。 -
@Codeanu
O(n) < O(n long n)