当前位置: 首页 > 面试题库 >

在不排序列表的情况下查找未排序列表的第N个项目

周凯捷
2023-03-14
问题内容

嘿。我有一个很大的数组,我想找到第N个最大值。我可以简单地对数组进行排序,然后采用第N个元素,但是我只对一个元素感兴趣,因此可能有比对整个数组进行排序更好的方法…


问题答案:

排序至少需要O(nlogn)运行时间-
有非常有效的选择算法可以在线性时间内解决您的问题。

Partition-based selection(有时是Quick select),它基于quicksort(递归分区)的思想,是一个很好的解决方案(请参阅伪代码的链接+另一个示例)。



 类似资料:
  • 问题内容: 如何在不同情况下( 大写 和 小写 )对带有varchar2列的表进行排序? 例如,当我按“名称”列进行排序时,将得到以下结果: 我想要的是这样的: 问题答案: 使用,例如 如果您需要解决非英语语言的特殊字符,则可能需要有关NLSSORT的其他答案。如果您不这样做,我会尝试和KISS一起使用,因为它很容易记住和使用,并被他人阅读(可维护性)。

  • 问题如下: 由一个固定数量的n个端到端连接的段组成的列表,每个段已经按升序排列。 我考虑过使用mergesort,基本情况是,如果等于n,那么返回并合并它们,因为我们已经知道它们是排序的,但是如果我有3个段,它将不起作用,因为我除以2,你不能将3个段平均分成两部分。 另一种方法类似于合并排序。所以我对每个段使用n个堆栈,如果L[i],我们可以识别它 如果你有主意的话,伪代码会很好。 编辑: 一个例

  • 我有一个点列表,每个点都是一个大小为2的小列表。我想按x的递增顺序对点列表进行排序,如果x值相等,我就按y的递减顺序排序来打破平局。 我编写了一个自定义比较器来对点进行排序,如下所示: 以下是排序前的输入: 以下是使用上述比较器排序后产生的结果: 观察:- 输入按x的升序排序。 (5,12)被正确地放在(5,10)之前 (9,-15)被正确地放在(9,-1000)之前 然而,(10001,-10)

  • 问题内容: 如何使用Collections.sort()或其他排序方法按字典顺序对Java中的列表列表进行排序? 问题答案: 您将必须实现自己的类并将实例传递给 然后分类很容易

  • 我想在未排序列表中找到近似中位数,我知道两种算法 算法1-快速选择 算法 2 - 中位数的中位数 我不能在我的项目中使用快速选择,因为它在最坏的情况下需要O(n^2。我听说过中位数,但我的同事建议它需要O(n)和一些常数因子,因此它的时间复杂度是Cn,常数因子比quickselect大。我想知道与中位数相关的常数因子是什么?为什么中位数不使用9元素的伪中位数?< br >或者,他们是否有任何其他算

  • 我有一个算法包含以下情况;我想知道是否有可能有所改进(我认为不可能,但我可能错了)。 我有一个对象列表。我有两个不同的(独立的)键来对它们进行排序:和。实际上,我可以在算法开始时以两种方式对列表进行排序,而无需花费大量成本;因此,我有两份清单: (Python语法,但我认为任何人都能理解)。在这个阶段,只要复杂性保持在O(nlogn)以下,我完全可以做更多的事情(初始化新变量)。 我需要提取的许多