algorithm - 在长度为 n 的列表中找到 x 个最小的整数

标签 algorithm

您有一个包含 n 个整数的列表,您希望 x 最小。例如,

x_smallest([1, 2, 5, 4, 3], 3) 应该返回 [1, 2, 3]

我会在合理的范围内投票选出独特的运行时间,并为最佳运行时间打上绿色勾号。

我将从 O(n * x) 开始:创建一个长度为 x 的数组。遍历列表 x 次,每次取出下一个最小的整数。

编辑

  • 您事先不知道这些数字有多大或多小。
  • 你不关心最后的顺序,你只想要最小的 x。
  • 这已经在一些解决方案中得到处理,但是假设虽然不能保证列表是唯一的,但您也不会得到退化的列表,例如 [1, 1, 1, 1 , 1] 任一个。

最佳答案

您可以在 O(n) 时间内找到第 k 个最小的元素。 This has been discussed on StackOverflow before .有一些相对简单的随机算法,例如 QuickSelect,在 O(n) 的预期时间内运行,而更复杂的算法在 O(n) 的最坏情况下运行。

给定第 k 个最小的元素,你可以遍历列表以找到所有小于第 k 个最小的元素,你就完成了。 (我假设结果数组不需要排序。)

整体运行时间为 O(n)。

关于algorithm - 在长度为 n 的列表中找到 x 个最小的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764355/

相关文章:

algorithm - 谷歌地图多边形优化

algorithm - 如何求出二叉树的主深度是O(sqrt(N))?

python - 组之间的平衡洗牌

javascript - JS;简单数组中的最大路径和练习;无效结果

algorithm - 如何求解这个递归 T(n) = T(n − 1) + lg(1 + 1/n), T(1) = 1?

algorithm - 用最少的移动次数将一个集合分成 k 组

algorithm - 动态规划寻找最小路径

java - 最优化地计算 Haystack 字符串中针字符串的出现次数?

algorithm - 在算法复杂度分析中考虑大上限

javascript - 这个 NumberComplement 函数的时间复杂度是多少?