如何用O(1)的时间复杂度求栈中最小元素
解题思路:
我们经常会采用空间换取时间提高时间复杂度。我们可以使用两个栈结构,一个栈用来存储数据,另一个栈用来存储栈中的最小元素。思路如下:如果当前入栈的元素比原来栈中的最小值还小,则把这个值压入保存最小元素的栈中;在出栈时,如果当前入栈的元素恰好为当前栈中的最小值,保存最小值的栈顶元素也出栈,使得当前最小值变为其入栈之前的那个最小值。
实现代码如下:
package 求栈中最小元素;
/**
* 用链表方式实现栈
* @author dream
*
* @param <E>
*/
public class MyStack<E> {
Node<E> top = null;
public boolean isEmpty(){
return top == null;
}
public void push(E data){
Node<E> newNode =

本文介绍了如何在O(1)的时间复杂度下找到栈中的最小元素,通过使用两个栈,一个存储数据,另一个保存最小元素。当新入栈的元素小于当前最小值时,将其压入最小元素栈。出栈时,若出栈元素为最小值,最小元素栈也出栈,保持最小值的实时更新。
最低0.47元/天 解锁文章
2177

被折叠的 条评论
为什么被折叠?



