从无穷多个数字中找到最后k个元素中的最小数字

用户2731584

您将获得无限数量的列表。在最后k个元素中,使用最低复杂度找到最低元素(基于值)。

注意:一旦最小元素不在k子集中,则需要找出新的最小元素。

例如:输入:67 45 12 34 90 83 64 86 .... k = 5

最初(67 45 12 34 90)将为{k}。随着新输入的输入,{k}将是(45 12 34 90 83),(12 34 90 83 64),(34 90 83 64 86)...最低元素将分别是12、12和34。

有人知道如何解决这个问题吗?

科尔玛

您也可以在O(1)摊销时间内通过保留元素及其索引双端队列来实现。

当您看到一个新元素时:

  • 从左侧删除所有大于其的元素。这些元素不再能够成为最小值:它们早于新元素并且大于新元素,因此它们将始终由新元素主导。
  • 如果最右边的元素太旧(请添加超过k个元素),请删除它所有元素都有不同的索引,并且每个新元素的索引都会增加1。因此,每次只能有一个元素变得太旧。
  • 在左侧添加新元素。

通过此维护过程,双端队列始终按从右到左的元素排序(即,最右边的元素最小),并按从左到右的索引排序(因为从左边添加了新元素)。

因此,最小的最近元素是双端队列的最右边元素。

更新:看来我想出了这个算法:link。链接由@Niklas B.提供

这是Python中有效的实现:

class BoundedMinTracker:
    def __init__(self, k):
        self._k = k
        self._index = 0
        self._deque = collections.deque()

    def update(self, el):
        while self._deque and self._deque[0][4] >= el:
            self._deque.popleft()
        self._deque.appendleft((self._index, el))
        self._index += 1
        if self._deque[-1][0] < self._index - self._k:
            self._deque.pop()

    def get(self):
        return self._deque[-1][5]

此方法在O(1)摊销时间内进行更新(每个元素仅从双端队列添加和删除一次),最坏的内存使用是O(k),但通常消耗更少(它不存储要存储的元素太大而无法成为最小值)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在多维数组中找到k个最小数字的索引?

来自分类Dev

如何在多维数组中找到k个最小数字的索引?

来自分类Dev

第k个最小数字

来自分类Dev

如何在C中找到数字中的最小数字及其在向量中的位置?

来自分类Dev

C在浮点数组中找到2个最大数字和2个最小数字

来自分类Dev

查找数组中k个最小数字的索引的算法

来自分类Dev

在第二列中找到与第一列中的索引值相对应的最小数字

来自分类Dev

为数组中的每个元素找到最后一个较小或相等的数字?

来自分类Dev

如何找到等于给定值的对应元素的最小数字总和?

来自分类Dev

在Python中大小为N的未排序列表中获取k个最小数字的最快方法?

来自分类Dev

如何找到除一个特定索引之外的最小数字

来自分类Dev

n的数字乘积的最小数字

来自分类Dev

如何在不排序的情况下找到数组中的最小数字?

来自分类Dev

Java:两个最小数字helo

来自分类Dev

如何计算ArrayList中的最小数字?

来自分类Dev

随机数组中的最小数字及其索引

来自分类Dev

一组中的两个最小数字

来自分类Dev

查找一列中的3个最小数字

来自分类Dev

有效计算数组中 N 个最小数字的总和

来自分类Dev

算法:从n个数组(队列)中找到k个数字的最小和

来自分类Dev

在html中找到最后一个活动元素

来自分类Dev

给定用户3位数字,找到并打印它的最小数字

来自分类Dev

仅使用允许的数字来构建大于K的最小数字

来自分类Dev

如何总结具有多个条件的元组列表中的最后一个数字/元素?

来自分类Dev

如何在字符串中找到最后一个字母,该字符串是java中数字和字符的组合

来自分类Dev

FInd下一个相同数字的最小数字Python

来自分类Dev

获取小数点后的第二个最小数字

来自分类Dev

不能由数组中的数字之和形成的最小数字

来自分类Dev

在数字列表中查找最小数字的递归方法

Related 相关文章

  1. 1

    如何在多维数组中找到k个最小数字的索引?

  2. 2

    如何在多维数组中找到k个最小数字的索引?

  3. 3

    第k个最小数字

  4. 4

    如何在C中找到数字中的最小数字及其在向量中的位置?

  5. 5

    C在浮点数组中找到2个最大数字和2个最小数字

  6. 6

    查找数组中k个最小数字的索引的算法

  7. 7

    在第二列中找到与第一列中的索引值相对应的最小数字

  8. 8

    为数组中的每个元素找到最后一个较小或相等的数字?

  9. 9

    如何找到等于给定值的对应元素的最小数字总和?

  10. 10

    在Python中大小为N的未排序列表中获取k个最小数字的最快方法?

  11. 11

    如何找到除一个特定索引之外的最小数字

  12. 12

    n的数字乘积的最小数字

  13. 13

    如何在不排序的情况下找到数组中的最小数字?

  14. 14

    Java:两个最小数字helo

  15. 15

    如何计算ArrayList中的最小数字?

  16. 16

    随机数组中的最小数字及其索引

  17. 17

    一组中的两个最小数字

  18. 18

    查找一列中的3个最小数字

  19. 19

    有效计算数组中 N 个最小数字的总和

  20. 20

    算法:从n个数组(队列)中找到k个数字的最小和

  21. 21

    在html中找到最后一个活动元素

  22. 22

    给定用户3位数字,找到并打印它的最小数字

  23. 23

    仅使用允许的数字来构建大于K的最小数字

  24. 24

    如何总结具有多个条件的元组列表中的最后一个数字/元素?

  25. 25

    如何在字符串中找到最后一个字母,该字符串是java中数字和字符的组合

  26. 26

    FInd下一个相同数字的最小数字Python

  27. 27

    获取小数点后的第二个最小数字

  28. 28

    不能由数组中的数字之和形成的最小数字

  29. 29

    在数字列表中查找最小数字的递归方法

热门标签

归档