实现一个栈,要求实现该站的出栈,入栈,返回最小值,并且返回最小值方法的时间复杂度为O(1)
思路:定义两个栈num和min,num栈用来实现入栈出栈,min栈的栈顶一直是num栈中所有数的最小值,当有数据入栈时先向num栈存储该数,接着判断min栈是否为空,如果为空的话就直接存入,如果不为空的话将入栈的数与min栈栈顶元素比较,如果入栈的数更小那么min栈入栈,出栈时判断min栈栈顶与num栈栈顶是否相等,相等的话min出栈,然后让num出栈,不相等的话min不出栈,返回最小值时直接返回min栈的栈顶即可
入栈:
1.第一个数5入栈

2.第二个数6入栈

3.第三个数4入栈

出栈
出栈时判断min栈栈顶与num栈栈顶是否相等,相等的话min出栈,然后让num出栈
相等情况下

不相等情况下

当我们返回栈的最小值时只需要输出min栈的栈顶即可
代码实现
import java.util.Stack;
public class StackMin {
Stack<Integer> num = new Stack<>();
Stack<Integer> min = new Stack<>();
//入栈
public void push(Integer data){
// 首先数据栈一定入栈
num.push(data);
// 判断min栈当中有没有值,如果没有那么就直接写入,如果有那么要比对当前数据和min栈当中栈顶元素的大小
if(min.empty() || data<=min.peek()){
min.push(data);
}
}
//出栈
public int pop(){
if (num.peek() == min.peek()){
min.pop();
}
return num.pop();
}
//返回最小值
public void min(){
if(!min.empty()){
System.out.println(min.peek());
}
}
}

本文介绍如何在Java中实现一个栈,不仅支持常规的出栈、入栈操作,而且能在O(1)时间复杂度内返回栈内的最小值。通过维护两个栈——num栈用于一般操作,min栈保存当前最小值,确保了高效查找最小值。在入栈时,新元素与min栈顶比较,若更小则也存入min栈;出栈时,若num栈顶与min栈顶相同,则min栈也出栈。返回最小值直接返回min栈顶即可。
7110

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



