面试经典150题 -- 栈(总结)

总的链接

面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台

关于栈 -- stack 的学习链接

c++的STL中的栈 -- stack-CSDN博客

20 . 有效的括号

这题直接用栈模拟就好了;

这里用一种取巧的方法 , 当遇见左括号,加入右括号,遇到右括号,直接判断栈顶元素是不是与当前元素相等(这样可以避免再开一个哈希表来存相应括号之间的映射关系),相等的话,pop栈顶,否则,直接return false;

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

71 . 简化路径

先求出夹在两个/之间的目录名,根据题意,对于空或" . "都不用管,然后用栈模拟,如果不是"..",那么直接入栈,是".."的话,弹出栈顶的字符串;

class Solution {
public:vector<string> get(string p,char ch){vector<string> ans ;string cur ;for(char c : p){if(c == ch){ans.push_back(cur);cur.clear();}else{cur += c ;}}ans.push_back(cur);return ans ;}string simplifyPath(string path) {vector<string> p = get(path,'/');vector<string> stk ;for(string s : p){if(s==".."){if(!stk.empty())stk.pop_back();}else if(!s.empty() && s!="."){stk.push_back(s);}}string ans  ;if(stk.empty()){ans = "/";}else{for(string s : stk){ans += "/" + s ;}}return ans ;}
};

155 . 最小栈

用一个栈来模拟正常的操作,用一个递减的栈来维护栈顶为当前序列的最小元素;

详情请看代码 : 

class MinStack {
public:stack<int> mi,st;MinStack() {mi.push(INT_MAX) ;}void push(int val) {st.push(val) ;mi.push(min(val,mi.top()));}void pop() {st.pop();mi.pop();}int top() {return st.top() ;}int getMin() {return mi.top() ;}
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(val);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/

150 . 逆波兰表达式求值

栈的典型例题,如果是运算符,就取出栈顶两位元素进行运算,然后将结果压入栈中,如果是数字,直接压入栈中,最后返回栈顶元素即为运算结果 ;

typedef long long LL ;
class Solution {
public:int evalRPN(vector<string>& tokens) {stack<LL> st ;for(string s : tokens){if(s=="+" ||s=="-" ||s=="*" ||s=="/"){LL x = st.top();st.pop() ;LL y = st.top();st.pop();if(s=="+") st.push(x+y);else if(s=="-") st.push(y-x);else if(s=="*") st.push(1LL * y * x);else st.push(y / x);}else{st.push(stoll(s));}}return st.top() ;}
};

224 . 基本计算器

直接用栈模拟 ;

class Solution {
public:void replace(string& s){int pos = s.find(" ");while (pos != -1) {s.replace(pos, 1, "");pos = s.find(" ");}}int calculate(string s) {// 存放所有的数字stack<int> nums;// 为了防止第一个数为负数,先往 nums 加个 0nums.push(0);// 将所有的空格去掉replace(s);// 存放所有的操作,包括 +/-stack<char> ops;int n = s.size();for(int i = 0; i < n; i++) {char c = s[i];if(c == '(')ops.push(c);else if(c == ')') {// 计算到最近一个左括号为止while(!ops.empty()) {char op = ops.top();if(op != '(')calc(nums, ops);else {ops.pop();break;}}}else {if(isdigit(c)) {int cur_num = 0;int j = i;// 将从 i 位置开始后面的连续数字整体取出,加入 numswhile(j <n && isdigit(s[j]))cur_num = cur_num*10 + (s[j++] - '0');// 注意上面的计算一定要有括号,否则有可能会溢出nums.push(cur_num);i = j-1;}else {if (i > 0 && (s[i - 1] == '(' || s[i - 1] == '+' || s[i - 1] == '-')) {nums.push(0);}// 有一个新操作要入栈时,先把栈内可以算的都算了while(!ops.empty() && ops.top() != '(')calc(nums, ops);ops.push(c);}}}while(!ops.empty())calc(nums, ops);return nums.top();}void calc(stack<int> &nums, stack<char> &ops) {if(nums.size() < 2 || ops.empty())return;int b = nums.top(); nums.pop();int a = nums.top(); nums.pop();char op = ops.top(); ops.pop();nums.push(op == '+' ? a+b : a-b);}
};

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

以管理员权限删除某文件夹

到开始菜单中找到—命令提示符—右击以管理员运行 使用&#xff1a;del /f /s /q “文件夹位置” 例&#xff1a;del /f /s /q "C:\Program Files (x86)\my_code\.git"

HARRYPOTTER: FAWKES

攻击机 192.168.223.128 目标机192.168.223.143 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.143 开启了21 22 80 2222 9898 五个端口&#xff0c;其中21端口可以匿名FTP登录&#xff0c;好像有点说法,百度搜索一下发现可以用anonymous登录…

政安晨:快速学会~机器学习的Pandas数据技能(六)(数据类型和缺失值)

在数据分析中&#xff0c;了解数据的类型是非常重要的。数据类型决定了可以对数据进行哪些操作&#xff0c;以及如何对数据进行分析和处理。 常用的数据类型包括&#xff1a; 数值型数据&#xff1a;包括整数&#xff08;int&#xff09;和浮点数&#xff08;float&#xff09;…

CentOS 7安装Nodejs

说明&#xff1a;本文介绍如何在云服务器上CentOS 7操作系统上安装Nodejs。以及安装过程中遇到的问题。 下载压缩包&解压 首先&#xff0c;先去官网下载Linux版本的Node。 将下载下来的压缩包&#xff0c;上传到云服务器上&#xff0c;解压。配置环境变量。 &#xff08…

【Python】基于动态残差学习的堆叠式LSTM模型和传统BP在股票预测中的应用

1. 前言 本论文探讨了长短时记忆网络&#xff08;LSTM&#xff09;和反向传播神经网络&#xff08;BP&#xff09;在股票价格预测中的应用。首先&#xff0c;我们介绍了LSTM和BP在时间序列预测中的基本原理和应用背景。通过对比分析两者的优缺点&#xff0c;我们选择了LSTM作为…

vscode +markdown 的安装和使用

文章目录 前言一、vscode markdown 是什么&#xff1f;1.vscode是什么&#xff1f;2.markdown 是什么&#xff1f; 二、安装步骤1.下载2.安装 三、安装插件1.安装 Markdown All in One2.安装 Markdown Preview Enhanced3. Paste Image v1.0.44.LimfxCodeExv0.7.105.Code Spell …

4.2 Verilog 过程赋值

关键词&#xff1a;阻塞赋值&#xff0c;非阻塞赋值&#xff0c;并行 过程性赋值是在 initial 或 always 语句块里的赋值&#xff0c;赋值对象是寄存器、整数、实数等类型。 这些变量在被赋值后&#xff0c;其值将保持不变&#xff0c;直到重新被赋予新值。 连续性赋值总是处…

C语言笔试题之求出二叉树的最大深度(递归解决)

实例要求&#xff1a; 1、给定一个二叉树 root &#xff0c;返回其最大深度&#xff1b;2、二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数&#xff1b; 案例展示&#xff1a; 实例分析&#xff1a; 1、判断根节点是否为空&#xff1b;2、分别递归处理左…

阿里云幻兽帕鲁服务器有用过的吗?搭建简单啊

玩转幻兽帕鲁服务器&#xff0c;幻兽帕鲁Palworld多人游戏专用服务器一键部署教程&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云百科…

AR特效自研AI算法技术解决方案

在当今这个高速发展的数字化时代&#xff0c;增强现实&#xff08;AR&#xff09;技术已经成为企业创新和市场竞争的重要手段。美摄科技凭借对AI技术的深厚积累&#xff0c;为企业提供了一套创新的AR特效自研AI算法技术解决方案&#xff0c;旨在满足企业在AR领域的多元化需求。…

Mysql-数据库压力测试

安装软件 官方软件 安装插件提供了更多的监听器选项 数据库驱动 数据库测试 配置 这里以一个简单的案例进行&#xff0c;进行连接池为10,20,30的梯度压测&#xff1a; select * from tb_order_item where id 1410932957404114945;新建一个线程组 新增一个连接池配置 新建一…

公众号取关粉丝获取方法1

一、前言 你是不是还在苦恼&#xff0c;每日关注那么多新人&#xff0c;为何同样也会有那么多人取关&#xff0c;到底是哪里出了问题&#xff0c;这样一个困扰公众号主的一个世纪难题&#xff0c;今日小编就要和大家揭晓&#xff0c;当然&#xff0c;这篇文章可能对于不是公众…

JAVA设计模式之享元模式详解

享元模式 1 享元模式介绍 享元模式 (flyweight pattern) 的原始定义是&#xff1a;摒弃了在每个对象中保存所有数据的方式&#xff0c;通过共享多个对象所共有的相同状态&#xff0c;从而让我们能在有限的内存容量中载入更多对象。 从这个定义中你可以发现&#xff0c;享元模…

【动态规划】【C++算法】2518. 好分区的数目

作者推荐 【动态规划】【前缀和】【C算法】LCP 57. 打地鼠 本文涉及知识点 动态规划汇总 LeetCode:2518. 好分区的数目 给你一个正整数数组 nums 和一个整数 k 。 分区 的定义是&#xff1a;将数组划分成两个有序的 组 &#xff0c;并满足每个元素 恰好 存在于 某一个 组中…

Ribbon全方位解析:构建弹性的Java微服务

第1章 引言 大家好,我是小黑,咱们今天聊聊Ribbon,这货是个客户端负载均衡工具,用在Spring Cloud里面能让咱们的服务调用更加灵活和健壮。负载均衡,听起来挺高大上的,其实就是把外界的请求平摊到多个服务器上,避免某个服务器压力太大,其他的却在那儿闲着。 Ribbon的牛…

SFML(1) | 自由落体小球

SFML(1) | 自由落体小球 文章目录 SFML(1) | 自由落体小球1. 目的2. SFML 适合做图形显示的理由3. 使用 SFML - 构建阶段4. 使用 SFML - C 代码5. 运行效果6. 总结7. References 1. 目的 通过一些简单的例子&#xff08;2D小游戏的基础代码片段&#xff09;&#xff0c; 来学习…

SECS/GEM300需要实现哪些内容

GEM300实现设备全自动化&#xff0c;也是金南瓜已经全面支持功能&#xff0c;作为国内首家和最好的300mm标准软件。 GEM300包含E4、E5、E30、E37、E39、E40、E84、E87、E90、E94、E116等 CJob全称Conrtol Job 1. 控制设备作业的控制 2. 包括队列、开始、暂停、继续、完成等等…

SpringBoot WebSocket客户端与服务端一对一收发信息

依赖 <!--websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>配置类 Configuration public class WebSocketConfig {Bean //方法返回值交…

尚硅谷 Vue3+TypeScript 学习笔记(上)

目录 一、创建Vue3工程 1.1. 【基于 vue-cli 创建】 1.2. 【基于 vite 创建】(推荐) 1.3. 【一个简单的效果】 二、Vue3核心语法 2.1. 【OptionsAPI 与 CompositionAPI】 Options API 的弊端 Composition API 的优势 2.2. 【拉开序幕的 setup】 setup 概述 setup 的…

无人机系统组装与调试,多旋翼无人机组装与调试技术详解,无人机飞控系统原理

多旋翼无人机飞控系统的组装 在开始组装前&#xff0c;确保您已准备好所有必要的工具和材料。这包括螺丝刀、电烙铁、焊台、杜邦线、飞控板、GPS模块、电机、桨叶等。 飞控安装 安全开关安装&#xff0c;将安全开关固定在机架上。将安全开关的线插到飞控SWITCH插口上。 电调…