leetcode155. 最小棧 1441. 用棧操作構建陣列 劍指 Offer 09. 用兩個棧實現佇列

l_c_c_c發表於2020-09-27
題目:leetcode155. 最小棧
題目描述:設計一個支援 push ,pop ,top 操作,並能在常數時間內檢索到最小元素的棧。在這裡插入圖片描述在這裡插入圖片描述在這裡插入圖片描述
程式碼:
class MinStack {
public:
    /** initialize your data structure here. */
    stack<int>s1;
    stack<int>s2;
    
    void push(int x) {
        s1.push(x);
        if(s2.empty()||x<=getMin()) s2.push(x);
    }
    
    void pop() {
        if(s1.top()==s2.top()) s2.pop();
        s1.pop();
    }
    
    int top() {
        return s1.top();
    }
    
    int getMin() {
        return s2.top();
    }
};

/**
 * 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->getMin();
 */
題目:leetcode1441. 用棧操作構建陣列
題目描述:給你一個目標陣列 target 和一個整數 n。每次迭代,需要從 list = {1,2,3…, n} 中依序讀取一個數字。在這裡插入圖片描述在這裡插入圖片描述在這裡插入圖片描述
程式碼:
class Solution {
public:
    vector<string> buildArray(vector<int>& target, int n) {
        int i=1;
        vector<string>ans;
        for(int j=0;j<target.size();++j){
            while(i<n&&i!=target[j]){
                ans.push_back("Push");
                ans.push_back("Pop");
                ++i;
            }
            ans.push_back("Push");
            ++i;
        }
        return ans;
    }
};
題目:劍指 Offer 09. 用兩個棧實現佇列
題目描述:用兩個棧實現一個佇列。佇列的宣告如下,請實現它的兩個函式 appendTail 和 deleteHead ,分別完成在佇列尾部插入整數和在佇列頭部刪除整數的功能。(若佇列中沒有元素,deleteHead 操作返回 -1 )在這裡插入圖片描述
程式碼:
class CQueue {
public:
    CQueue() {}
    stack<int>s1;
    stack<int>s2;
    
    void appendTail(int value) {
        s1.push(value);
    }
    
    int deleteHead() {
        if(!s1.empty()) return -1;
        while(!s1.empty()){
            int tmp=s1.top();
            s1.pop();
            s2.push(tmp);
        }
        int res=s2.top();
        s2.pop();
        while(!s2.empty()){
            int temp=s2.top();
            s2.pop();
            s2.push(temp);
        }
        return res;
    }
};

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue* obj = new CQueue();
 * obj->appendTail(value);
 * int param_2 = obj->deleteHead();
 */

相關文章