定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間複雜度應爲O(1))。
首先我們來分析一下這個題,題目要求時間複雜度爲O(1),那麼我們可以用空間換取時間,重新開闢一個棧,讓該棧僅保存輸入元素的最小值。
注意!!!
題目並沒有給提供棧,需要在外部首先定義兩個棧。
數據棧 - - - dataStsck ;
最小值棧 - - - minStack ;
import java.util.Stack;
public class Test{
//數據棧
Stack<Integer> dataStsck = new Stack();
//最小值棧
Stack<Integer> minStack = new Stack();
public void push(int node) {
dataStsck.push(node);
if(minStack.isEmpty() ||minStack.peek() > node ){
minStack.push(node);
}
}
public void pop() {
//將數據棧中最小值刪除時,同時要刪除最小棧中對應的元素。
if(dataStsck.pop() == minStack.peek()){
minStack.pop();
}
}
public int top() {
//該方法僅要求返回棧頂值,故直接返回數據棧頂就好了
return dataStsck.peek();
}
public int min() {
//直接輸出最小值棧的棧頂元素就好了。
return minStack.peek();
}
}