劍指offer之包含min函數的棧(C++/Java雙重實現)

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();
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章