這道題目思路就一個,就是如何存儲最小元素這一問題。
題目鏈接:https://oj.leetcode.com/problems/min-stack/
算法描述:
1.數值棧:cowboyStack, 最小棧:cowboyMiniStack
2.入棧x時,如果cowboyStack是空的,則將x分別雅茹cowboyStack、cowboyMiniStack中
3.入棧x時,如果cowboyStack不是空的,比較x和cowboyMiniStack的棧頂,如果x小於cowboyMiniStack的棧頂元素,則x壓入cowboyMiniStack
4.出棧時,如果cowboyStack棧頂和cowboyMiniStack棧頂元素相同,則cowboyStack棧頂出棧的同時,cowboyMiniStack的棧頂元素也出棧。
代碼:
class MinStack {
public:
stack<int> cowboyStack;
stack<int> cowboyMiniStack;
public:
void push(int x) {
cowboyStack.push(x);
if (cowboyMiniStack.size()==0) {
cowboyMiniStack.push(x);
}else if(x<=cowboyMiniStack.top()){
cowboyMiniStack.push(x);
}
}
void pop() {
if (cowboyStack.size()<=0) {
return;
}
//pop miniStack
if (cowboyMiniStack.top() == cowboyStack.top()) {
cowboyMiniStack.pop();
}
//pop stack
cowboyStack.pop();
}
int top() {
//stack's size is larger than zero
if (cowboyStack.size()>0) {
return cowboyStack.top();
}
//stack is empty
return -1;
}
int getMin() {
//stack's size is larger than zero
if (cowboyMiniStack.size()>0) {
return cowboyMiniStack.top();
}
//stack is empty
return -1;
}
};
效率: