C 在时间复杂度为O(1)的堆栈中查找最小值

C 在时间复杂度为O(1)的堆栈中查找最小值,c,algorithm,C,Algorithm,如何在O(1)复杂度的堆栈中找到最小值。要找到堆栈的最小值,我找到了两种方法: 1) 最小值=堆栈的最大值 遍历堆栈并更新最小值以获得堆栈的最小值。 这需要O(N)复杂度,其中N是堆栈中的元素数 2) 将堆栈元素放入一个小堆中 要提取的根值将是堆栈中的最小值 这需要O(N日志(N)) 但我如何实现O(1)算法,一种独立于输入大小的算法 这里的假设是堆栈已经加载了元素,您不能这样做。查找任意堆栈的最小元素的O(1)算法也可以用于查找双链表的最小元素,然后可以使用该算法创建O(n)排序算法 现在,可

如何在O(1)复杂度的堆栈中找到最小值。要找到堆栈的最小值,我找到了两种方法: 1) 最小值=堆栈的最大值 遍历堆栈并更新最小值以获得堆栈的最小值。 这需要O(N)复杂度,其中N是堆栈中的元素数

2) 将堆栈元素放入一个小堆中 要提取的根值将是堆栈中的最小值 这需要O(N日志(N))

但我如何实现O(1)算法,一种独立于输入大小的算法

这里的假设是堆栈已经加载了元素

,您不能这样做。查找任意堆栈的最小元素的O(1)算法也可以用于查找双链表的最小元素,然后可以使用该算法创建O(n)排序算法

现在,可以实现一个堆栈,它在构建时跟踪其最小元素。这样的堆栈可以返回其存储的最小值,并且只有在您碰巧弹出最小元素时才需要执行O(n)搜索。但事实并非如此