題目
定義棧的數(shù)據(jù)結(jié)構(gòu)七问,請在該類型中實現(xiàn)一個能夠得到棧中所含最小元素的min函數(shù)(時間復雜度應為O(1))忍弛。
程序核心思想
定義一個用于存放最小值的棧互拾。
什么時候最小值棧才需要入棧呢?當入棧元素小于最小值棧頂元素時铣猩;當入棧元素等于最小值棧頂元素時(比如入棧元素為3,3 如果等于棧頂元素不入的話溺欧,只入了一個3喊熟,那么彈出一個3之后,最小棧就空了姐刁,而此時芥牌,最小值還是3)。
什么時候最小棧需要出棧呢聂使?當出棧的元素等于最小棧棧頂元素時(大于不用出壁拉,因為最小棧存的是最小值;小于岩遗,怎么會小于呢扇商?/笑)凤瘦。
參考別人的代碼宿礁,另一種說法是。如果入棧元素小于最小棧棧頂元素蔬芥,那么入棧這個元素梆靖,否則入棧最小棧棧頂元素。
出棧是一起出棧的笔诵。
可能更好理解返吻。
Tips
無
代碼
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
if(stack2.empty() || stack2.peek() >= node){
stack2.push(node);
}
}
public void pop() {
int temp = stack1.pop();
if(temp == stack2.peek()){
stack2.pop();
}
}
public int top() {
return stack1.peek();
}
public int min() {
return stack2.peek();
}
}