首页 > 其他分享 >代码随想录day11 | 232.用栈实现队列 225.队列实现栈 20.有效的括号 1047. 删除字符串中的所有相邻重复项

代码随想录day11 | 232.用栈实现队列 225.队列实现栈 20.有效的括号 1047. 删除字符串中的所有相邻重复项

时间:2022-10-05 17:47:03浏览次数:86  
标签:20 队列 复杂度 随想录 pop st int push empty

232.用栈实现队列

题目|文章

1.使用两个栈(修改输出)

思路

1.使用两个栈,用一个栈输入数据,用另一个栈输出数据
2.当输出栈为空时,将输入栈的数据转移到输出栈中

实现

点击查看代码
class MyQueue {
public:
    MyQueue() {        
    }   
    void push(int x) {
        stack1.push(x);
    }   
    int pop() { 
        if(stack2.empty()){     
            while(!stack1.empty()){//将栈1的元素放入栈2
                stack2.push(stack1.top());
                stack1.pop();
            }
        }
        int result = stack2.top();//取出栈2的栈顶元素
        stack2.pop();
        return result;
    }
    
    int peek() {
        int result = this->pop();
        stack2.push(result);
        return result;    
    }
    
    bool empty() {
        return stack1.empty() && stack2.empty();
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

复杂度分析

  • 入栈时间复杂度:O(1)
  • 入栈空间复杂度:O(n)
  • 出栈时间复杂度:O(1),均摊复杂度,每个数据只用进一次输出栈,出一次输出栈。
  • 出栈空间复杂度:O(1)

2.倒序入栈(修改输入)

思路

1.入栈时先将栈1所有元素存入栈2,将元素存入栈1,在将栈2内的所有元素存入栈1
2.出栈只用出栈顶元素

实现

点击查看代码
class MyQueue {
public:
    MyQueue() {
    }   
    void push(int x) {
        while(!stack1.empty()){
            stack2.push(stack1.top());
            stack1.pop();
        }
        stack1.push(x);
        while(!stack2.empty()){
            stack1.push(stack2.top());
            stack2.pop();
        }
    }
    
    int pop() {
        int x = stack1.top();
        stack1.pop();
        return x;
    }
    
    int peek() {
        return stack1.top();
    }
    
    bool empty() {
        return stack1.empty();
    }
private:
    stack<int> stack1;
    stack<int> stack2;
};

复杂度分析

  • 入栈时间复杂度:O(n)
  • 入栈空间复杂度:O(n)
  • 出栈时间复杂度:O(1)
  • 出栈空间复杂度:O(1)

225.队列实现栈

题目|文章

1.修改输入

思路

1.将新元素输入到队列2
2.将队列1中的全部元素输入到队列2
3.交换队列1和队列2

实现

点击查看代码
class MyStack {
public:
    MyStack() {

    }
    
    void push(int x) {
        que2.push(x);
        while(!que1.empty()){
            que2.push(que1.front());
            que1.pop();
        }
        swap(que1,que2);
    }
    
    int pop() {
        int x = que1.front();
        que1.pop();
        return x;
    }
    
    int top() {
        return que1.front();
    }
    
    bool empty() {
        return que1.empty();
    }
private:
    queue<int> que1;
    queue<int> que2;
};

复杂度分析

  • 入队列时间复杂度:O(n)
  • 入队列空间复杂度:O(n)
  • 出队列时间复杂度:O(1)
  • 出队列空间复杂度:O(1)

2.修改输出(一个队列)

思路

遍历一个队列,将队头元素加入到队尾,直到最后一个元素

实现

点击查看代码
class MyStack {
public:
    MyStack() {
    }
    void push(int x) {
        que.push(x);
    }
    
    int pop() {
        int size = que.size()-1;
        while(size--){
            que.push(que.front());
            que.pop();
        }
        int x = que.front();
        que.pop();
        return x;

    }
    
    int top() {
        int x = this-> pop();
        que.push(x);
        return x;
    }
    
    bool empty() {
        return que.empty();
    }
private:
    queue<int> que;
};

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */

复杂度分析

  • 入队列时间复杂度:O(1)
  • 入队列空间复杂度:O(n)
  • 出队列时间复杂度:O(n)
  • 出队列空间复杂度:O(1)

20.有效的括号

题目|文章
image

思路

1.对字符串进行遍历
2.如果字符与栈首元素配对,则弹出栈首元素。否则将该字符入栈。

实现

点击查看代码
class Solution {
public:
    bool isValid(string s) {
        stack<char> st;
        for(int i = 0; i < s.size(); i++){
            if(st.empty()) st.push(s[i]);
            else if(st.top() == '(' && s[i] == ')')st.pop();
            else if(st.top() == '[' && s[i] == ']')st.pop();
            else if(st.top() == '{' && s[i] == '}')st.pop();
            else{
                st.push(s[i]);
            }
        }
        return st.empty();
    }
};

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

1047. 删除字符串中的所有相邻重复项

题目|文章
image

思路

1.遍历字符串
2.对比字符和栈顶元素,如果相等,弹出栈顶元素,如果不相等,将字符入栈
3.将栈中元素输入新字符串中
4.翻转新字符串

实现

点击查看代码
class Solution {
public:
    string removeDuplicates(string s) {
        stack<char> st;
        for(int i = 0; i < s.size(); i++){
            if(st.empty()) st.push(s[i]);
            else if(st.top() == s[i]) st.pop();
            else{
                st.push(s[i]);
            }
        }
        string m(st.size(),0);
        int stSize = st.size();
        for(int i = 0; i < stSize; i++){
            m[i] = st.top();
            st.pop();
        }
        reverse(m.begin(),m.end());
        return m;
    }
};

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

标签:20,队列,复杂度,随想录,pop,st,int,push,empty
From: https://www.cnblogs.com/suodi/p/16755387.html

相关文章

  • luogu P3644 [APIO2015] 八邻旁之桥
    Link题解首先忽略掉同侧的询问。对于\(K=1\),它其实就是问一个点到其它点的距离之和最小值,直接找到中位数然后计算即可。对于一条路线,我们可以发现,如果建的桥里这两个......
  • 报告分享|2022动漫游戏上市公司年度绩效数据报告
    报告链接:http://tecdat.cn/?p=287632021年,恰逢十四五开局之年,“十四五”是国家文化产业进一步提升的关键期,动漫游戏作为文化产业的重要组成部分也迎来新的发展机遇。2021......
  • 报告分享|2022年中国企业ESG战略与实践白皮书
    报告链接:http://tecdat.cn/?p=28765ESG,即环境(Environment)、社会责任(Social)和公司治理(Governance),是关注企业环境、社会、治理绩效而非财务绩效,衡量企业可持续发展能力的评......
  • 2022.10.5 总结
    A初始时只有\(a_k=1\),有\(m\)次操作,每次交换\(a_u,a_v\)的值,问忽略多少次操作可以使最终\(a_i=1\).简单DP即可。code#include<algorithm>#include<cstdio>#in......
  • 2022.10.05考试总结
    2022.10.05考试总结得分:\(280/400\)总结:今天考试题目比较简单,第一,二题都是结论题,第三题在考场上因为没有考虑到有五十位导致挂了\(50\)分,第四题想到了正解,但是考试的时候......
  • 知识图谱顶会论文(ACL-2022) PKGC:预训练模型是否有利于KGC?可靠的评估和合理的方法
    PKGC:预训练模型是否有利于KGC?可靠的评估和合理的方法论文地址:DoPre-trainedModelsBenefitKnowledgeGraphCompletion?AReliableEvaluationandaReasonableAppr......
  • 2022.10.5 若干代数题
    链接对\(\foralla,b,c\ge0\)且满足\((a^2+b^2)(b^2+c^2)(c^2+a^2)=2\),求\(a+b+c\)的最值思考三元换二元链接对\(a,b,c\ge0\)且\(ab+bc+ca=1\),求\[P=\frac{a......
  • 月薪20k-50k| 西人马3D机器视觉算法、语音识别、DSP软件工程师招聘
    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁。公司简介:西人马FATRI是一家IDM模式的芯片公司,致力于为民用航空、能源、轨......
  • 2022.10.5 模拟赛
    T1签到题题面Description给定\(n\)个数,求出这\(n\)个数的一个非空子集,使得这个子集中的数的和能被\(n\)整除,无解输出\(-1\).Input第一行为数据组数\(T\)接下来\(T\)......
  • 2022最新SpringMVC面试题附完整答案
    SpringMVC面试题一、单选题1.下列关于SpringMVC说法正确的是BA.SpringMVC和Spring没有关系B.SpringMVC是一个控制层框架,复制接收和处理请求C.SpringMVC可以脱离Spring单独......