支持min()方法的栈,这种方法相对比较省空间。
import java.util.Random;
import java.util.Stack;
public class StackWithMin extends Stack<Integer> {
Stack<Integer> stack;
public StackWithMin(){
stack=new Stack<Integer>();
}
public void push(int value){
if(value<=min()){
stack.push(value);
}
super.push(value);
}
public Integer pop(){
int value=super.pop();
if(value==min()){
stack.pop();
}
return value;
}
public int min(){
if(stack.empty()){
return Integer.MAX_VALUE;
}
else{
return stack.peek();
}
}
public static void main(String[] args) {
StackWithMin sWithMin=new StackWithMin();
for(int i=0;i<10;i++){
Random random=new Random();
int n=random.nextInt()%100;
System.out.print(n+" ");
sWithMin.push(n);
}
System.out.println();
for(int i=0;i<10;i++){
System.out.print(sWithMin.min()+" ");
sWithMin.pop();
}
}
}
/*output example
9 -55 36 -15 0 -89 9 -67 33 -99
-99 -89 -89 -89 -89 -55 -55 -55 -55 9 */
本文介绍了一种支持min()方法的栈实现方案,该方案通过维护一个辅助栈来跟踪最小元素,使得min()操作的时间复杂度为O(1)。文章提供了完整的Java代码示例,展示了如何在插入和删除元素的同时保持辅助栈顶部始终为当前栈中的最小元素。

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



