【发布时间】:2018-11-13 03:19:03
【问题描述】:
我有一个未排序的数字列表,我想要一个算法,这样我可以获得第一个 R 元素的排序列表,但是由于这个 R 对于不同的测试用例可能不同,我不想每次都对第一个 R 的数组进行排序元素。有没有办法让我完成这项工作。一种可能的方法是维护向量数组,以便我先排序 1 个数字,然后排序前 2 个数字,然后排序前 3 个数字,依此类推,但这需要 1log1 + 2log2 + 3log3 + .... + nlogn 时间,即 N^ 2logN 复杂度。是否有更快的方法?
【问题讨论】:
-
您在寻找std::nth_element 吗?
-
对整个列表进行排序并完成它是不切实际的吗?
-
基本上如果 R 是 6 并且我有一个说 25 个数字的列表,那么我应该能够应用排序数组的所有操作,例如找到不大于给定数字的最小值,比如 S前 6 个元素的排序列表,所以简而言之,我需要前 R 个元素的排序列表,其中 R 在不同的测试用例中可能不同,所以如果整个列表已经排序,我将无法获得大于的最小数字的正确结果S 因为如果说我们有 s=13 并且在前 6 个元素中我有 1,2,3,17,18,20 那么 ans 是 17 但后来如果将 15 添加为第 8 个元素 ans 现在是 15 即错误
-
@kunalgupta 我不明白这个问题...如果添加 15,您只需将其插入正确的位置?您应该添加您正在尝试实现的示例,因为它远非明确......
-
您可以列出
std::pair<int, int>,其中first是数字,second是未排序列表中的索引。然后在您对其进行排序后,您可以检索第一个R数字,其中second < R以获取您的列表。将为您节省大量排序,但可能不会更快,具体取决于数据。