当前位置: 首页 > news >正文

代码随想录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中的内容转移到bwhile (!a.empty()) {b.push(a.top());a.pop();}//再将x推入a中a.push(x);//最后将b中的内容转移回awhile (!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中内容转移到bwhile len(self.a) > 0:self.b.append(self.a[-1])self.a.pop()#将x推入到a中self.a.append(x)#将b中内容转移回awhile 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中内容转移到bwhile (!a.empty()) {b.push(a.front());a.pop();}//将x推入a中a.push(x);//将b中内容转移回awhile (!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 queueclass MyStack:def __init__(self):self.a = queue.Queue()self.b = queue.Queue() #辅助队列def push(self, x: int) -> None:#将a中的内容转移到bwhile not self.a.empty():self.b.put(self.a.get())#往a中推入xself.a.put(x)#将b中的内容转移回awhile not self.b.empty():self.a.put(self.b.get())returndef pop(self) -> int:return self.a.get()def top(self) -> int:t = self.a.get()self.push(t)return tdef 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 Falseelse:t = stk.pop()if (t == '(' and c == ')') or \(t == '[' and c == ']') or \(t == '{' and c == '}'):passelse:return Falsereturn 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++代码如下,

class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> res;deque<int> q;for (int i = 0; i < nums.size(); ++i) {if (!q.empty() && q.front() < i - k + 1) q.pop_front();while (!q.empty() && nums[q.back()] <= nums[i]) q.pop_back();q.push_back(i);if (i >= k - 1) res.emplace_back(nums[q.front()]);}return res;}
};

python3代码如下,

from collections import dequeclass Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:res = []q = deque()for i in range(len(nums)):if len(q) != 0 and q[0] < i - k + 1:q.popleft()while len(q) != 0 and nums[q[-1]] <= nums[i]:q.pop()q.append(i)if i >= k - 1:res.append(nums[q[0]])return res

题目7:347. 前 K 个高频元素

C++代码如下,

typedef pair<int,int> PII;class Solution {
public:vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int,int> cnt;for (auto x : nums) cnt[x]++;vector<PII> a;for (auto [k, v] : cnt) a.emplace_back(v, k);sort(a.begin(), a.end());reverse(a.begin(), a.end());vector<int> res;for (int i = 0; i < k; ++i) res.emplace_back(a[i].second);return res;}
};

python3代码如下,

from collections import Counterclass Solution:def topKFrequent(self, nums: List[int], k: int) -> List[int]:cnt = Counter(nums)a = cnt.most_common(k)res = [x[0] for x in a]return res

3 参考

代码随想录官网

相关文章:

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

目录 1 介绍2 训练3 参考 1 介绍 本博客用来记录代码随想录leetcode200题中栈与队列部分的题目。 2 训练 题目1&#xff1a;232. 用栈实现队列 C代码如下&#xff0c; #include <stack>class MyQueue { private:stack<int> a;stack<int> b; //辅助栈 pu…...

使用Python实现2048小游戏

使用Python实现2048小游戏源码分享。实现效果如下所示。 实现效果图 游戏开始效果图 游戏结束效果图 部分源码截图 下载链接 基于如下的运行环境。运行需要安装tkinter /Library/Frameworks/Python.framework/Versions/3.7/bin/python/bin/python /Users/nihui/Documents/P…...

漏洞管理是如何在攻击者之前识别漏洞从而帮助人们阻止攻击的

漏洞管理 是主动查找、评估和缓解组织 IT 环境中的安全漏洞、弱点、差距、错误配置和错误的过程。该过程通常扩展到整个 IT 环境&#xff0c;包括网络、应用程序、系统、基础设施、软件和第三方服务等。鉴于所涉及的高成本&#xff0c;组织根本无法承受网络攻击和数据泄露。如果…...

LNMT部署jpress

LNMT部署jpress 环境要求&#xff1a; MySQL版本5.6/5.7 tomcat版本9.0.65 源码安装MySQL5.7版 //源码安装MySQL5.7版1关闭防火墙 2创建mysql用户 3上传mysql5.7包&#xff08;https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.30-linux-glibc2.12-x86_64.tar.g…...

汽车软件研发工具链丨怿星科技新产品重磅发布

“创新引领未来”聚焦汽车软件新基建&#xff0c;4月27日下午&#xff0c;怿星科技2024新产品发布会在北京圆满举行&#xff01;智能汽车领域的企业代表、知名大企业负责人、投资机构代表、研究机构代表齐聚现场&#xff0c;线上直播同步开启&#xff0c;共同见证怿星科技从单点…...

Faiss原理及使用总结

Faiss&#xff08;Facebook AI Similarity Search&#xff09;是一个用于高效相似性搜索和密集向量聚类的库。 一、原理 向量表示与相似度度量&#xff1a;在Faiss中&#xff0c;数据通常被表示为高维向量&#xff0c;这些向量可以来自深度学习模型的特征提取&#xff0c;也可…...

跨越智能建筑桥梁:西门子PLC无缝对接BACnet楼宇自动化系统化

智能楼宇每一个环节的互联互通都至关重要&#xff0c;而PLC&#xff08;可编程逻辑控制器&#xff09;作为自动化领域的基石&#xff0c;其与BACnet协议的融合无疑成为了构建智能楼宇神经系统的关键节点。今天&#xff0c;让我们深入探讨如何利用先进的PLC转BACnet协议网关&…...

景源畅信电商:抖音小店有哪些比较热门的宣传方法?

抖音小店的热门宣传方法&#xff0c;是许多商家关注的焦点。在数字化营销时代&#xff0c;有效的宣传手段不仅能提升品牌知名度&#xff0c;还能吸引潜在消费者&#xff0c;促进销售。以下是针对抖音小店热门宣传方法的详细阐述&#xff1a; 一、短视频内容营销 作为抖音的核心…...

兄弟DCP-7057激光打印机报错误代码EC检修及分析

故障描述&#xff1a; 兄弟DCP-7057激光打印机屏幕显示无法打印EC关闭电源&#xff0c;然后重新打开打印机。 故障检修及分析&#xff1a; 1、定影单元风扇的插线连接不良 检查定影单元风扇的插线连接并重新连接&#xff1b; 2、定影单元风扇故障 更换定影单元风扇&#xff1b…...

【华为】IPSec VPN手动配置

【华为】IPSec VPN手动配置 拓扑配置ISP - 2AR1NAT - Easy IPIPSec VPN AR3NATIPsec VPN PC检验 配置文档AR1AR2 拓扑 配置 配置步骤 1、配置IP地址&#xff0c;ISP 路由器用 Lo0 模拟互联网 2、漳州和福州两个出口路由器配置默认路由指向ISP路由器 3、进行 IPsec VPN配置&…...

面试题分享之Java集合篇(三)

注意&#xff1a;文章若有错误的地方&#xff0c;欢迎评论区里面指正 &#x1f36d; 系列文章目录 面试题分享之Java基础篇&#xff08;二&#xff09;面试题分享之Java基础篇&#xff08;三&#xff09; 面试题分享之Java集合篇&#xff08;一&#xff09;、 面试题分享之Ja…...

【python】模拟巴特沃斯滤波器

巴特沃斯滤波器&#xff08;Butterworth Filter&#xff09;&#xff0c;以其设计者斯蒂芬巴特沃斯&#xff08;Stephen Butterworth&#xff09;的名字命名&#xff0c;是一种具有平滑频率响应的滤波器。这种滤波器在频域中具有非常平坦的无波纹响应&#xff0c;直到它达到截止…...

面试题:简述Go的垃圾回收机制

Go的GC(Garbage Collection, 垃圾回收)机制主要是用来自动释放不再被程序使用的内存&#xff0c;以防止内存泄漏。Go的垃圾回收是并发的&#xff0c;也就是说&#xff0c;它在主程序运行的同时进行垃圾回收。 1. 标记清除(Mark and Sweep) Go的垃圾回收器主要使用的是标记清除…...

Vue、React实现excel导出功能(三种实现方式保姆级讲解)

第一种&#xff1a;后端返回文件流&#xff0c;前端转换并导出&#xff08;常用&#xff0c;通常公司都是用这种方式&#xff09; 第二种&#xff1a;纯后端导出&#xff08;需要了解&#xff09; 第三种&#xff1a;纯前端导出&#xff08;不建议使用&#xff0c;数据处理放…...

初识C语言——第十六天

C语言中的语句结构类型:顺序/选择/循环 分支语句 if else switch 循环语句 while for do whlie goto语句 代码练习:找两个整数的最大公约数和最小公倍数 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>//int main() //{ // int age 60; // if (ag…...

Vue的省份联动

Vue的省份联动 一、安装依赖库 npm install element-china-area-data -Snpm install element-ui --save全局使用elemntui组件库 import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css;Vue.use(ElementUI);二 、代码如下 <template><div…...

element-ui skeleton 组件源码分享

今日简单分享 skeleton 骨架屏组件源码&#xff0c;主要从以下四个方面来讲解&#xff1a; 1、skeleton 组件的页面结构 2、skeleton 组件的属性 3、skeleton item 组件的属性 4、skeleton 组件的 slot 一、skeleton 组件的页面结构 二、skeleton 组件的属性 2.1 animate…...

深度学习:基于TensorFlow、Keras,使用长短期记忆神经网络模型(LSTM)对Microsoft股票进行预测分析

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…...

【websocket-客户端可视化工具】

postman 新版postman (版本v11以上) &#xff0c;除了http协议&#xff0c;还支持了Websocket&#xff0c;MQTT&#xff0c;gRPC等多种连接协议&#xff0c;可以作为多种协议的客户端&#xff0c;使用起来非常方便。 使用 服务端代码 这里以websocket协议举例&#xff0c;代…...

STC8增强型单片机开发——C51版本Keil环境搭建

一、目标 了解C51版本Keil开发环境的概念和用途掌握C51版本Keil环境的安装和配置方法熟悉C51版本Keil开发环境的使用 二、准备工作 Windows 操作系统Keil C51 安装包&#xff08;可以从Keil官网下载&#xff09;一款8051单片机开发板 三、搭建流程 环境搭建的基本流程&#xf…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...