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

【代码随想录】【算法训练营】【第11天】 [20]有效的括号 [1047]删除字符串中的所有相邻重复项 [150]逆波兰表达式求值

前言

思路及算法思维,指路 代码随想录。
题目来自 LeetCode。

day 11,周六,又开始变的困难了~

题目详情

[20] 有效的括号

题目描述

20 有效的括号
20 有效的括号

解题思路

前提:括号匹配
思路:利用栈的后入先出特性,进行匹配。
重点:栈的使用。

代码实现

C语言
bool isValid(char* s) {int len = strlen(s);char stack[len];memset(stack, 0, len);int top = -1;for (int i = 0; i < strlen(s); i++){if ((s[i] == '(') || (s[i] == '[') || (s[i] == '{')){stack[++top] = s[i];}else{if (top < 0){return false;}if (((s[i] == ')') && (stack[top] != '(')) || ((s[i] == ']') && (stack[top] != '[')) || ((s[i] == '}') && (stack[top] != '{'))){return false;}top--;}}if (top >= 0){return false;}return true;
}

可以进一步过滤字符串长度为奇数的情况……

bool isValid(char* s) {int len = strlen(s);if (len % 2 != 0){return false;}char stack[len];memset(stack, 0, len);int top = -1;for (int i = 0; i < strlen(s); i++){if ((s[i] == '(') || (s[i] == '[') || (s[i] == '{')){stack[++top] = s[i];}else{if (top < 0){return false;}if (((s[i] == ')') && (stack[top] != '(')) || ((s[i] == ']') && (stack[top] != '[')) || ((s[i] == '}') && (stack[top] != '{'))){return false;}top--;}}if (top >= 0){return false;}return true;
}

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

题目描述

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

解题思路

前提:删除相邻重复字母
思路:利用栈的后入先出的特性,进行匹配
重点:注意当前字母需要与栈顶元素比较。

代码实现

C语言
char* removeDuplicates(char* s) {int slen = strlen(s);char *stack = (char *)malloc(sizeof(char) * slen);memset(stack, 0, slen);int top = -1;for (int i = 0; i < slen; i++){if ((top >= 0) && (s[i] == stack[top])){stack[top] = '\0';top--;}else{stack[++top] = s[i];}}return stack;
}

[150] 逆波兰表达式求值

题目描述

150 逆波兰表达式求值
150 逆波兰表达式求值

解题思路

前提:逆波兰表达式
思路:利用栈的后入先出特性实现。
重点:注意数值可能出现负数,自实现string转换数值时,需要考虑负数情况;也可以直接使用atoi函数。

代码实现

C语言
int evalRPN(char** tokens, int tokensSize) {int stack[tokensSize];int top = -1;for (int i = 0; i < tokensSize; i++){// 判断该元素是否为算符if ((strlen(tokens[i]) == 1) && ((tokens[i][0] == '*') || (tokens[i][0] == '/') || (tokens[i][0] == '+') || (tokens[i][0] == '-'))){if (top < 1){return 0;}int val2 = stack[top--];int val1 = stack[top--];int res = 0;if (tokens[i][0] == '*'){res = val1 * val2;}else if (tokens[i][0] == '/'){res = val1 / val2;}else if (tokens[i][0] == '+'){res = val1 + val2;}else{res = val1 - val2;}stack[++top] = res;continue;}// 该元素不为算符,需要注意负数的情况int len = strlen(tokens[i]);int val = 0;for (int j = 0; j < len; j++){if (tokens[i][j] != '-'){val = val * 10 + (tokens[i][j] - '0');}}if (tokens[i][0] != '-'){stack[++top] = val;}else{stack[++top] = 0 - val;}}return stack[top];
}

也可以直接使用atoi函数转换……

int evalRPN(char** tokens, int tokensSize) {int stack[tokensSize];int top = -1;for (int i = 0; i < tokensSize; i++){// 判断该元素是否为算符if ((strlen(tokens[i]) == 1) && ((tokens[i][0] == '*') || (tokens[i][0] == '/') || (tokens[i][0] == '+') || (tokens[i][0] == '-'))){if (top < 1){return 0;}int val2 = stack[top--];int val1 = stack[top--];int res = 0;if (tokens[i][0] == '*'){res = val1 * val2;}else if (tokens[i][0] == '/'){res = val1 / val2;}else if (tokens[i][0] == '+'){res = val1 + val2;}else{res = val1 - val2;}stack[++top] = res;continue;}// 该元素不为算符stack[++top] = atoi(tokens[i]);}return stack[top];
}

今日收获

  1. 栈的使用。

相关文章:

【代码随想录】【算法训练营】【第11天】 [20]有效的括号 [1047]删除字符串中的所有相邻重复项 [150]逆波兰表达式求值

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 11&#xff0c;周六&#xff0c;又开始变的困难了~ 题目详情 [20] 有效的括号 题目描述 20 有效的括号 解题思路 前提&#xff1a;括号匹配 思路&#xff1a;利用栈的后入先出特性&#xf…...

vue实现图片懒加载

在src中创建一个directives文件夹在里面创建一个lazy.js文件 在main.js中引入 import lazy from ./directives/lazy app.directive(lazy, lazy) 在app.vue中 <script setup lang"ts"> import { RouterLink, RouterView } from vue-router import HelloWorl…...

Python | Leetcode Python题解之第101题对称二叉树

题目&#xff1a; 题解&#xff1a; class Solution:# 在【100. 相同的树】的基础上稍加改动def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:if p is None or q is None:return p is qreturn p.val q.val and self.isSameTree(p.left, q.ri…...

周报5.20~5.26

学习内容&#xff1a; 主要了解了Qt的信号和槽、ui页面布局、各类常见控件的使用、绘图事件以及文件操作的相关知识&#xff0c;并且完成相关案例的设计。练习代码了解了多层感知机、激活函数、多项式回归、高维线性回归、暂退法、分布偏移、深度学习计算等相关知识与代码案例…...

RDP方式连接服务器上传文件方法

随笔 目录 1. RDP 连接服务器 2. 为避免rdp 访问界面文字不清晰 3. 本地上传文件到服务器 1. RDP 连接服务器 # mstsc 连接服务器step1: 输入mstscstep2: 输入 IP, username, passwd 2. 为避免rdp 访问界面文字不清晰 解决方法&#xff1a; 3. 本地上传文件到服务器 step…...

网络信息安全

目录 引言 网络信息安全的基本概念 定义 主要目标 网络信息安全的范围 主要威胁 恶意软件 黑客攻击 拒绝服务攻击 社交工程 内部威胁 常用技术和防护措施 加密技术 防火墙 入侵检测和防御系统 访问控制 多因素认证 安全审计和监控 安全培训和意识提升 未来发…...

java中的对象

文章目录 一、对象的创建过程1.1 检查加载1.2 分配内存1.3 内存空间初始化1.4 设置对象头1.5 对象初始化 二、对象内存布局2.1 布局解析2.2 JOL使用 三、对象的访问定位3.1 句柄访问3.2 直接指针 四、对象的分配策略4.1 栈上分配4.2 优先分配到Eden区4.3 大对象直接进入老年代4…...

【MySQL精通之路】MySQL-环境变量

本节列出了MySQL直接或间接使用的环境变量。 其中大部分也可以在本手册的其他地方找到。 命令行上的选项优先于选项文件和环境变量中指定的值&#xff0c;选项文件中的值优先于环境变量中的值。 在许多情况下&#xff0c;最好使用配置文件而不是环境变量来修改MySQL的行为。…...

Day42 最后一块石头的重量Ⅱ + 目标和 + 一和零

1049 最后一块石头的重量Ⅱ 题目链接&#xff1a;1049.最后一块石头的重量Ⅱ 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和…...

01.爬虫---初识网络爬虫

01.初识网络爬虫 1.什么是网络爬虫2.网络爬虫的类型3.网络爬虫的工作原理4.网络爬虫的应用场景5.网络爬虫的挑战与应对策略6.爬虫的合法性总结 1.什么是网络爬虫 网络爬虫&#xff0c;亦称网络蜘蛛或网络机器人&#xff0c;是一种能够自动地、系统地浏览和收集互联网上信息的程…...

集合、Collection接口特点和常用方法

1、集合介绍 对于保存多个数据使用的是数组&#xff0c;那么数组有不足的地方。比如&#xff0c; 长度开始时必须指定&#xff0c;而且一旦制定&#xff0c;不能更改。 保存的必须为同一类型的元素。 使用数组进行增加/删除元素的示意代码&#xff0c;也就是比较麻烦。 为…...

12. Web开发:介绍Web开发的基本概念,Servlet和JSP的使用,MVC设计模式的应用等。

Web开发的轻松入门之旅 想象一下&#xff0c;Web开发就像是搭建一个在线的小家&#xff0c;你既是设计师&#xff0c;又是建筑师&#xff0c;还是管家。我们一步步来探索这个过程&#xff0c;保证简单易懂&#xff0c;就像搭积木一样有趣&#xff01; Web开发基础认知 Web开…...

文件系统--inode

文章目录 概述认识磁盘了解磁盘的存储结构对磁盘的存储结构进行逻辑抽象 操作系统对磁盘的使用宏观认识细节认识再谈目录再谈文件的增删 概述 文件有很多&#xff0c;但是被打开的文件很少&#xff0c;这些没有被打开的文件在磁盘中&#xff0c;这就叫做磁盘文件。每次先打开一…...

数据清洗(ETL)案例实操

文章目录 数据清洗&#xff08;ETL&#xff09;概述案例需求和分析代码实现和结果分析 数据清洗&#xff08;ETL&#xff09;概述 “ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;Extract&#xff09;、转换&…...

Zookeeper 面试题(一)

1. ZooKeeper 适合哪些应用场景&#xff1f; ZooKeeper 是一个高性能、高可靠的分布式协调系统&#xff0c;它在分布式系统和大数据领域中有着广泛的应用。以下是 ZooKeeper 适合的一些应用场景&#xff1a; 数据发布/订阅&#xff1a;ZooKeeper 可以作为配置中心&#xff0c;…...

怎么安装django特定版本

要安装Django的特定版本&#xff0c;你可以使用Python的包管理工具pip。以下是在命令行中安装Django特定版本的步骤&#xff1a; 确保你的计算机上已经安装了Python和pip。如果没有安装&#xff0c;你可以从Python官方网站下载并安装最新版本的Python&#xff0c;pip通常会随Py…...

关于Broken pipe异常的一点学习记录

什么是Broken pipe? pipe&#xff0c;管道&#xff0c;管道里面自然就是数据&#xff0c;通过指从文件或网络套接字读取的数据。当一个进程试图向一个已关闭的管道&#xff08;pipe&#xff09;写数据或者从一个已关闭的通道读数据时就会出现中断&#xff0c;也就是Broken pi…...

第十一课,end关键字、简单while循环嵌套、初识for循环

一&#xff0c;end关键字 end关键字用于在print输出的内容后面声明结束的字符&#xff0c;我们之前学过并且十分了解print是默认输出内容之后跟着换行的&#xff0c;如果我们不希望换行而希望使用其它字符来代替换行&#xff0c;就可以用end关键字来实现 特殊的&#xff0c;en…...

spring boot 集成mongodb

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.2.0.RELEASE</version></dependency>配置db: spring:data:mongodb:host: 127.0.…...

从零开始搭建SpringCloud Alibaba微服务架构

Spring Cloud Alibaba是Spring Cloud的一个拓展项目&#xff0c;它用于构建基于阿里巴巴的微服务应用。它提供了多个阿里巴巴的开源组件&#xff0c;如Nacos、Sentinel、Dubbo等&#xff0c;用于解决微服务架构中的服务注册、配置管理、流量控制等问题。 Spring Cloud Alibaba…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...