package stack;
/**
* 找出棧中最小的元素
* 先定義一個輔助棧,棧頂永遠存最小的元素。如原棧中添加元素比輔助棧頂元素大,輔助棧的棧頂元素複製一遍
* 放到輔助棧中,如果小,則直接放到輔助棧中。
*/
import java.util.Stack;
public class MinStack {
private Stack<Integer> stack=new Stack<Integer>();
private Stack<Integer> minStack=new Stack<Integer>();
public void push(int data){
stack.push(data);
if(minStack.size()==0 || minStack.peek()>data)
minStack.add(data);
else{
int date=minStack.peek();
minStack.add(date);//核心代碼,peek返回的是棧頂代碼
System.out.println("peek="+date+":minsize="+minStack.size());
}
}
public int pop() throws Exception{
if(stack.size()==0)
throw new Exception("棧中空了");
int data=stack.pop();
System.out.println("data="+data);
int mindata=minStack.pop();//核心代碼,原棧出,輔助棧也出。
System.out.println("mindata="+mindata);
return data;
}
public Object min() throws Exception{
if(minStack.size()==0)
throw new Exception("棧中空了");
return minStack.peek();
}
public static void main(String[] args) throws Exception {
MinStack minstack=new MinStack();
minstack.push(5);
minstack.push(7);
minstack.push(3);
minstack.push(4);
System.out.println(minstack.pop());
System.out.println(minstack.pop());
System.out.println("min="+minstack.min());
}
}
找出棧中最小的元素
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
org.apache.commons.lang3.StringUtils.isNoneEmpty([Ljava/lang/CharSequence;)Z
hanjiaqun
2019-10-25 14:24:58
刪除連續相同的字符串
hanjiaqun
2018-08-22 18:21:06
HashMap的實現與優化
hanjiaqun
2018-08-22 18:21:05
X*Y的矩陣,求出路徑總和
hanjiaqun
2018-08-22 18:21:04
There is no Action mapped for namespace / and action name login. - [unknown location]
hanjiaqun
2018-08-22 18:21:04
矩陣最小路徑和(java實現)
hanjiaqun
2018-08-22 18:21:04
對鏈表進行反轉(部分反轉)
hanjiaqun
2018-08-22 18:21:04
二叉樹的java集合(遍歷等)
hanjiaqun
2018-08-22 18:21:03