我正在自学算法课程,我正在尝试解决以下问题:
描述一个存储一组实数的数据结构,它可以在 O(1) 的摊销时间内执行以下每个操作:
Insert(x) :删除所有不大于 x 的元素,并将 x 添加到集合中。
FindMin() : 找到集合的最小值。
我意识到一旦你有了 Insert,findmin 就变得微不足道了,看看如何使用链表实现,你可以同时删除多个元素(即 O(1)),但找出要删除的链接(也就是 x 去哪里)似乎像 O(n) 或 O(log n) 操作,而不是 O(1)。问题给出了提示:考虑使用堆栈,但我看不出这有什么帮助。
任何帮助表示赞赏。
原始问题如下: