1.題目描述
定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,調用 min、push 及 pop 的時間複雜度都是 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
提示:
各函數的調用總次數不超過 20000 次.
2.問題分析
其實這題我們只要知道棧的特點和棧的底層實現就行
棧的底層:數組
棧的特點:一端進行插入和刪除,先進後出
3.代碼實現
3.1C++代碼
class MinStack {
public:
/** initialize your data structure here. */
int arr[10000];
int cnt;
MinStack() {
}
void push(int x) {
arr[cnt++]=x;
}
void pop() {
arr[--cnt]={0};
}
int top() {
return arr[cnt-1];
}
int min() {
int Min=arr[0];
for(int i=0;i<cnt;i++)
if(arr[i]<Min)
Min=arr[i];
return Min;
}
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->min();
*/
3.2Java代碼
class MinStack {
private int arr[];
private int cnt;
/** initialize your data structure here. */
public MinStack() {
arr=new int [100000];
}
public void push(int x) {
arr[cnt++]=x;
}
public void pop() {
arr[--cnt]=0;
}
public int top() {
return arr[cnt-1];
}
public int min() {
int Min=arr[0];
for(int i=0;i<cnt;i++)
if(arr[i]<Min)
Min=arr[i];
return Min;
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(x);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.min();
*/