代码随想录leetcode200题之栈与队列

目录

  • 1 介绍
  • 2 训练
  • 3 参考

1 介绍

本博客用来记录代码随想录leetcode200题中栈与队列部分的题目。

2 训练

题目1:232. 用栈实现队列

C++代码如下,

#include <stack>

class MyQueue {
private:
    stack<int> a;
    stack<int> b; //辅助栈
public:
    MyQueue() {
        a = stack<int>();
        b = stack<int>();
    }
    
    void push(int x) {
        //先把a中的内容转移到b
        while (!a.empty()) {
            b.push(a.top());
            a.pop();
        }

        //再将x推入a中
        a.push(x);

        //最后将b中的内容转移回a
        while (!b.empty()) {
            a.push(b.top());
            b.pop();
        }
        return;
    }
    
    int pop() {
        int t = a.top();
        a.pop();
        return t;
    }
    
    int peek() {
        return a.top();
    }
    
    bool empty() {
        return a.empty();
    }
};

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

python3代码如下,

class MyQueue:

    def __init__(self):
        self.a = []
        self.b = [] 


    def push(self, x: int) -> None:
        #将a中内容转移到b
        while len(self.a) > 0:
            self.b.append(self.a[-1])
            self.a.pop()
        
        #将x推入到a中
        self.a.append(x)

        #将b中内容转移回a
        while len(self.b) > 0:
            self.a.append(self.b[-1])
            self.b.pop()


    def pop(self) -> int:
        return self.a.pop()

    def peek(self) -> int:
        return self.a[-1]

    def empty(self) -> bool:
        return len(self.a) == 0


# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()

题目2:225. 用队列实现栈

C++代码如下,

class MyStack {
private:
    queue<int> a;
    queue<int> b; //辅助队列 

public:
    MyStack() {
        a = queue<int>();
        b = queue<int>();
    }
    
    void push(int x) {
        //将a中内容转移到b
        while (!a.empty()) {
            b.push(a.front());
            a.pop();
        }

        //将x推入a中
        a.push(x);

        //将b中内容转移回a
        while (!b.empty()) {
            a.push(b.front());
            b.pop();
        }
        return;
    }
    
    int pop() {
        int t = a.front();
        a.pop();
        return t;
    }
    
    int top() {
        return a.front();
    }
    
    bool empty() {
        return a.empty();
    }
};

/**
 * 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();
 */

python3代码如下,

import queue

class MyStack:

    def __init__(self):
        self.a = queue.Queue()
        self.b = queue.Queue() #辅助队列


    def push(self, x: int) -> None:
        #将a中的内容转移到b
        while not self.a.empty():
            self.b.put(self.a.get())

        #往a中推入x
        self.a.put(x)

        #将b中的内容转移回a
        while not self.b.empty():
            self.a.put(self.b.get())
        return



    def pop(self) -> int:
        return self.a.get()


    def top(self) -> int:
        t = self.a.get()
        self.push(t)
        return t


    def empty(self) -> bool:
        return self.a.empty()


# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()

题目3:20. 有效的括号

C++代码如下,

class Solution {
public:
    bool isValid(string s) {
        stack<char> stk;
        for (auto c : s) {
            if (c == '(' || c == '[' || c == '{') {
                stk.push(c);
            } else {
                if (!stk.empty()) {
                    char t = stk.top();
                    stk.pop();
                    if ((t == '(' && c == ')') 
                    || (t == '[' && c == ']') 
                    || (t == '{' && c == '}')) {
                        //
                    } else {
                        return false;
                    }
                } else {
                    return false;
                }
            }

        }
        return stk.empty();
    }
};

python3代码如下,

class Solution:
    def isValid(self, s: str) -> bool:
        stk = []
        for c in s:
            if c in "([{":
                stk.append(c)
            else:
                if len(stk) == 0:
                    return False
                else:
                    t = stk.pop()
                    if (t == '(' and c == ')') or \
                    (t == '[' and c == ']') or \
                    (t == '{' and c == '}'):
                        pass
                    else:
                        return False
        return len(stk) == 0

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

C++代码如下,

class Solution {
public:
    string removeDuplicates(string s) {
        stack<char> stk;
        for (auto c : s) {
            if (stk.empty() || stk.top() != c) {
                stk.push(c);
            } else {
                stk.pop();
            }
        }
        string t;
        while (!stk.empty()) {
            t += stk.top();
            stk.pop();
        }
        reverse(t.begin(), t.end());
        return t;
    }
};

python3代码如下,

class Solution:
    def removeDuplicates(self, s: str) -> str:
        stk = []
        for c in s:
            if len(stk) == 0 or stk[-1] != c:
                stk.append(c)
            else:
                stk.pop()
        res = "".join(stk)
        return res

题目5:150. 逆波兰表达式求值

C++代码如下,

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> stk;
        string operations = "+-*/";
        for (auto token : tokens) {
            if (operations.find(token) == string::npos) {
                stk.push(stoi(token));
            } else {
                int b = stk.top();
                stk.pop();
                int a = stk.top();
                stk.pop();         

                if (token == "+") stk.push(a+b);
                else if (token == "-") stk.push(a-b);
                else if (token == "*") stk.push(a*b);
                else stk.push(a/b);
            }
        }
        return stk.top();
    }
};

python3代码如下,

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        stk = []
        for token in tokens:
            if token not in ["+", "-", "*", "/"]:
                stk.append(int(token))
            else:
                b = stk[-1]
                stk.pop()
                a = stk[-1]
                stk.pop()

                if token == "+":
                    stk.append(a+b)
                elif token == "-":
                    stk.append(a-b)
                elif token == "*":
                    stk.append(int(a*b))
                else:
                    stk.append(int(a/b)) #注意a//b与int(a/b)的区别
                    
        return stk[-1]

题目6:239. 滑动窗口最大值

C++代码如下,


python3代码如下,


3 参考

代码随想录官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/601835.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java项目跑不起来 端口已被使用

背景 Springboot项目跑不起来&#xff0c;原因端口被占用。 解决方法 在 Windows 环境下&#xff0c;你可以按照以下步骤来查看某个端口被占用的情况&#xff0c;并停止相应的进程&#xff1a; 查看所有端口占用情况&#xff1a; 按下 Win R 键&#xff0c;打开运行窗口。…

C语言内存函数memcpy与memmove

一.memcpy的使用和模拟实现 1.函数原型 void* memcpy(void* destination, const void* source, size_t num); destination是目标内存块的指针 source是源内存块的指针 num是要复制的字节数 .函数memcpy从source的位置开始向后复制 num个字节 的数据到destination指向的内存位置…

YOLO系列自研改进:基于注意力机制的多尺度特征提取模块

目录 一、原理 二、代码 三、在YOLO中的应用 一、原理 这个模块的原理仍然是利用不同大小的卷积核来提取不同尺度的特征,同样将通道划分为两部分,一部分通过注意力机制进行通道信息和空间信息的提取,另一部分通过多个不同大小的卷积核来提取多尺度的特征信息。 二、代码…

【Unity】使用Resources.LoadAll读取文件的顺序问题

最近在做客户的一个项目&#xff0c;其中的一个模块使用到了照片&#xff0c;但是发现了一个很严重的问题。当你在使用Unity的时候&#xff0c;它竟然不按照顺序读取&#xff1f;这个机器人是不是逻辑有问题&#xff1f;如下图&#xff1a; 名字脱敏了哈。。。 照片比较多&…

await执行顺序

用一个简单的例子来说明&#xff0c;await到底在等待什么 求代码的打印顺序 function testAsy(x) {return new Promise((resolve) > {setTimeout(() > {resolve(x);}, 3000);}); } async function testAwt() {console.log("async开始执行");// 最先打印let r…

Sketch for Mac v100 中文激活版——设计师必备的矢量绘图软件

在数字化时代&#xff0c;设计无处不在&#xff0c;而Sketch for Mac正是一款专为设计师量身打造的设计利器。其简洁直观的操作界面、强大的功能和高效的工作流程&#xff0c;让您的创意无限释放。 Sketch for Mac v100 中文激活版下载 Sketch支持矢量图形编辑&#xff0c;无论…

机试:字符串相关简单问题

字符移动问题 这道题的描述是这样的&#xff1a;输入一个字符串&#xff0c;将其中的数字字符移动到非数字字符之后&#xff0c;并保持数字字符和非数字字符输入时的顺序。例如&#xff1a;输入字符串“ab4f35gr#a6”,输出为“abfgr#a4356”。 以下使我试着敲的代码&#xff…

Leetcode—138. 随机链表的复制【中等】(cend函数)

2024每日刷题&#xff08;129&#xff09; Leetcode—138. 随机链表的复制 实现代码 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;random NULL;} }; */class Solution { public:Node* copyRan…

QT+多线程TCP服务器+进阶版

针对之前的服务器&#xff0c;如果子线程工作类里面需要使用socket发送消息&#xff0c;必须要使用信号与槽的方法&#xff0c; 先发送一个信号给父进程&#xff0c;父进程调用socket发送消息&#xff08;原因是QT防止父子进程抢夺同一资源&#xff0c;因此直接规定父子进程不能…

雷蛇笔记本数据丢失怎么恢复?提供详细指南

在数字化时代&#xff0c;笔记本电脑已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;尽管技术不断进步&#xff0c;数据丢失的风险仍然存在。雷蛇&#xff08;Razer&#xff09;作为一家知名的电脑硬件制造商&#xff0c;其笔记本电脑也难免会遇到这样的问题。当…

数学建模资料|历年数维杯数学建模竞赛真题及获奖论文汇总

2024年第九届数维杯大学生数学建模挑战赛:2024年5月10日08:00-5月13日09:00举行,为了更好的帮助参赛同学了解竞赛的赛制及赛题特点,数乐君今天给大家整理了历年数维杯国赛真题及优秀论文,方便同学们赛前巩固训练,掌握解题方法,提高获奖率。 2023年数维杯国赛真题(ABC题…

使用Maven对Java独立应用程序进行编译打包

一、 安装Maven 1.解压&#xff0c;移动安装包 sudo tar -zxf ~/apache-maven-3.9.6-bin.tar.gz -C /usr/local/ cd /usr/local/ sudo mv apache-maven-3.9.6/ ./maven-3.9.6 sudo chown -R qiangzi ./maven-3.9.6 二、Java应用程序代码 1.版本信息&#xff1a; Spark-2.1…

Python Flask框架(一)初识Flask

Flask是使用Python编写的Web微框架。Web框架可以使我们不用关心底层的请求响应处理&#xff0c;更方便高效的编写Web程序。Flask有两个主要依赖&#xff0c;一个是WSGI&#xff08;Web Server Gateway Interface&#xff0c;web服务器网关接口&#xff09;工具集&#xff0c;另…

ansible——INVENTORY主机清单

一、Inventory主机清单 Inventory支持对主机进行分组&#xff0c;每个组内可以定义多个主机&#xff0c;每个主机都可以定义在任何一个或多个主机组内 二、Inventory主机清单部署 2.1 前期准备 systemctl stop firewalld setenforce 0 yum install epel-release -y yum install…

Python实战点云并行化处理

LAS 及其压缩版本 LAZ 是用于存储点云信息的流行文件格式&#xff0c;通常由 LiDAR 技术生成。 LiDAR&#xff08;即光探测和测距&#xff09;是一种遥感技术&#xff0c;用于测量距离并创建物体和景观的高精度 3D 地图。存储的点云信息主要包括X、Y、Z坐标、强度、颜色、特征分…

接入大量设备后,视频汇聚系统EasyCVR安防监控视频融合平台是如何实现负载均衡的?

一、负载均衡 随着技术的不断进步和监控需求的日益增长&#xff0c;企业视频监控系统的规模也在不断扩大&#xff0c;接入大量监控设备已成为一项常态化的挑战。为确保企业能够有效应对这一挑战&#xff0c;视频汇聚系统EasyCVR视频融合平台凭借其卓越的高并发处理能力&#x…

c++11 标准模板(STL)本地化库 - 平面类别(std::numpunct) - 定义数值标点规则

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义数值标点规则 std::numpunct template< class CharT >…

浅谈程序员的实用神器

作为一个程序员&#xff0c;有很多实用的工具和资源可以帮助我们提高工作效率和解决问题。以下是一些常用的程序员实用神器&#xff1a; 集成开发环境&#xff08;IDE&#xff09;&#xff1a;如Visual Studio Code、PyCharm、Eclipse等&#xff0c;提供代码编辑、调试、版本控…

APP 在华为应用市场上架 保姆级别详细流程

1、作为一名干开发的程序员&#xff0c;第一次能把自己的APP 上架&#xff0c;对自己来说是多么有意义的一项成就 2、创建一个 华为的开发者账号 根据提示填写完注册的信息https://developer.huawei.com/consumer/cn/product/华为开发者产品 | 开发者平台 | 流量变现 | 华为开…

虾皮商品详情页面的API接口与关键词搜索API接口

虾皮商品详情页面的API接口与关键词搜索API接口 在虾皮&#xff08;Shopee&#xff09;这样的电商平台中&#xff0c;API&#xff08;应用程序接口&#xff09;扮演着至关重要的角色&#xff0c;它们为开发者提供了与虾皮平台数据交互的桥梁。本文将详细介绍虾皮商品详情页面的…