leetcode155. 最小栈 1441. 用栈操作构建数组 剑指 Offer 09. 用两个栈实现队列

题目: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();
 */
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页