LeetCode刷题日记之栈与队列II

news2024/9/26 3:26:50

1.有效的括号

题目描述

在这里插入图片描述

解题思路

1.定义一个辅助栈stack来存放字符串,再定义一个以符号最为键、值的对象obj
2.循环遍历字符串,判断栈顶元素对应的key在obj中的值是否等于当前遍历值s[i],如果等于则直接弹栈,不等于则将s[i]值推入栈中。
3.最后判断栈是否为空,为空则是有效的括号,反之则不是。

var isValid = function(s) {
    let obj = {
        '{':'}',
        '[':']',
        '(':')'
    }
    let stack = [];
    for(let i =0;i<s.length;i++){
        const top = stack[stack.length - 1]
        if(obj[top] == s[i]) {
            stack.pop()
        } else {
            stack.push(s[i])
        }
    }

    return stack.length == 0
};

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

题目描述

在这里插入图片描述

解题思路

1.该题思路与有效的括号类似,先定义一个辅助栈stack来存放遍历过的数据
2.当栈顶元素与当前遍历项相等时弹栈,如果不相等则入栈
3.最后将栈元素拼接成字符串即可。

var removeDuplicates = function(s) {
  const stack = []
  for(let i = 0;i<s.length;i++){
      if(stack[stack.length - 1] == s[i]){  // 判断栈顶元素与当前元素
          stack.pop()
      } else{
          stack.push(s[i])
      }
  }
  return stack.join('')
};

3.逆波兰表达式

题目描述

在这里插入图片描述

解题思路

1.逆波兰表达式大概可以理解为遇到运算符之后就将前两个数字拿出来计算结果,将结果作为一个数字继续参与下次计算。
2.由于两个数字之间的除法只取整数部分,需要注意的是正数和负数的取整有区别需要注意。
3.同样定义一个辅助栈stack来存放数字。
4.循环遍历tokens,遇到数字就直接入栈,遇到符号则直接连续弹出两个栈,再将计算结果入栈即可。
5.最后栈中剩下的最后一个数字就是计算结果,题不难,写的时候注意细节即可。

var evalRPN = function(tokens) {
  const stack = []
  for(let i = 0;i<tokens.length;i++) {
      if(!isNaN(tokens[i])){
          stack.push(tokens[i])
      } else {
          const num1 = Number(stack.pop()) // 由于是有效表达式 不用判断极端情况
          const num2 = Number(stack.pop())
          let res;
          if(tokens[i] == '+') {
              res = num1 + num2;
          } else if(tokens[i] == '-') {
              res = num2 - num1  // 减法和除法 num2放前面
          } else if(tokens[i] == '*'){
             res = num2 * num1
          } else {
              res = num2 / num1
              res = res > 0 ? Math.floor(res) : Math.ceil(res) // 正负数取整有区别
          }
          stack.push(res)
      }
  }
  return stack.pop()
};

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

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

相关文章

数据结构---判断链表是否有环

判断链表是否有环判断链表是否有环方法1方法2JAVA实现问题扩展1问题扩展2判断链表是否有环 有一个单向链表&#xff0c;链表中有可能出现“环”&#xff0c;就像下图这样。那么&#xff0c;如何用程序来判断该链表是否为有环链表呢&#xff1f; 方法1 创建一个以节点ID为Ke…

大数据Kudu(九):Spark操作Kudu

文章目录 Spark操作Kudu 一、​​​​​​​​​​​​​​添加Maven依赖

【DELM回归预测】基于灰狼算法改进深度学习极限学习机GWO-DELM实现数据回归预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

网络请求与数据提取-urllib库

关于网络爬虫&#xff0c;其实就是模拟浏览器向网站服务器发送请求&#xff0c;然后从响应的结果中提取出需要的数据。那么&#xff0c;该如何实现这一流程了&#xff1f;对于初学者来说&#xff0c;可能都不知道该如何入手&#xff0c;学习爬虫时需不需要了解HTTP、TCP、IP 层…

入门:环境安装与部署

容器技术入门 随着时代的发展&#xff0c;Docker也逐渐走上了历史舞台&#xff0c;曾经我们想要安装一套环境&#xff0c;需要花费一下午甚至一整天来配置和安装各个部分&#xff08;比如运行我们自己的SpringBoot应用程序&#xff0c;可能需要安装数据库、安装Redis、安装MQ等…

springboot常用语法库

今天与大家分享springboot常用语法库的基本语法。如果有问题&#xff0c;望大家指教。 目录 1. freemarker是什么 1.1 优点 2. springboot整合freemarker 2.1 pom.xml 2.2 项目配置文件 2.3 Controller 2.4 index.ftl 2.5 常用功能演示 1. freemarker是什么 FreeMarke…

OPENGL ES 2.0 知识串讲 (3)——SHADER的功能GLSL语法(I)

更多图形知识请关注我的公众号&#xff1a; 在第一节中,我们介绍过 OpenGL ES 与 GLSL 的主要功能,就是往绘制 buffer 上绘制图片。其中虽然 GLSL 制作的 shader 是穿插在 OpenGL ES 中使用,但是我们在流程中可以看出来,两大 shader(vertex shader 和 fragment shader)相对于 O…

大学毕业生就业信息管理平台

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 系统在功能设计充分利用信息化技术和互联网的优势&#xff0c;建立一个以浏览器为用户工作界面&#xff0c;实现跨 平台…

Hive电子商务消费行为分析项目

文章目录数据说明环境准备项目代码上传数据文件并创建数据表数据清洗数据可视化客户分析交易分析门店分析评价分析数据说明 某零售企业的门店最近一年收集的数据 customer_details.csv:客户信息 transaction_details.csv:交易信息 store_details.csv:门店信息 store_review.c…

第1章 基础知识简介

&#x1f31e;欢迎来到C语言的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f320;本阶段属于练气阶段&#xff0c;希望各位仙友顺利完成…

【机器码】原码、反码、补码的学习

目录 让我们看看这三个码是什么 原码、反码、补码各自的范围 补码的加减运算 根据自己学习做的笔记来记录一下 原码、反码、补码&#xff0c;巩固自己的学习成果。 有符号数是由机器数和真值组合而成 真值&#xff1a;数值数据的实际值&#xff0c;带有-符号 …

RL 实践(3)—— 悬崖漫步【QLearning Sarsa 各种变体】

本文介绍如何用 QLeaning 系列和 Sarsa 系列表格方法解经典的悬崖漫步 (Cliff Walking) 问题完整代码下载&#xff1a;4_[Gym Custom] Cliff Walking (Q-Learning series and Sarsa series) 文章目录1. 悬崖漫步环境 (Cliff Walking)2. 使用 TD 方法求解2.1 Sarsa2.1.1 Sarsa 原…

kali 安装AWVS [赠附件]

前言 1.AWVS简介 AWVS&#xff08;Acunetix Web Vulnerability Scanner&#xff09;是一款知名的网络漏洞扫描工具&#xff0c;通过网络爬虫测试网站安全&#xff0c;检测流行的Web应用攻击&#xff0c;如跨站脚本、sql 注入等。据统计&#xff0c;75% 的互联网攻击目标是基于…

项目中遇到的错误

项目中遇到的错误swagger2 和 swagger3swagger 文档的注解springboot 版本问题SQL 关键字异常Apifox 的使用集中版本管理swagger2 和 swagger3 swagger2和 swagger3 需要导入的依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfo…

LabVIEW FPGA中可重入和非可重入子VI的区别

LabVIEW FPGA中可重入和非可重入子VI的区别 LabVIEW FPGAVI默认是可重入的。如果多次调用重入VI&#xff0c;则每个实例会占用FPGA器件的单独硬件资源。如果使用非重入VI&#xff0c;无论是并行多次调用还是仅调用一次&#xff0c;都只会创建一个硬件实例并将其用于该VI。 ​…

最常用的 9 个JavaScript 函数与示例

输出内容才能更好的理解输入的知识 前言&#x1f380; 如果你想深入图形、可视化等领域&#xff0c;那么肯定离不开 canvas、webgl、three.js 等一系列技术。在这众多技术中&#xff0c;选择canvas2d为基础来入门是一个不错的选择。 canvas在动画、可视化、图片处理等领域有着…

物联网通信技术原理 第5章

目录 5.1 移动通信的基本概念及发展历史 5.1.1 移动通信的基本概念 5.1.2 移动通信的发展历史&#xff08;理解&#xff09; 1.第一代移动通信系统(1G) 2.第二代移动通信系统(2G) 3.第三代移动通信系统(3G) 5.1.3 移动通信的发展趋势与展望 5.2 无线传播与移动信道 5.2…

哈希的应用:布隆过滤器(C++实现)

文章目录1. 布隆过滤器1.1 背景1.2 概念1.3 控制误判率2. 实现布隆过滤器2.1 布隆过滤器类2.2 Set2.3 Test2.4 删除3. 优点4. 缺陷4. 缺陷1. 布隆过滤器 1.1 背景 位图&#xff08;bitmap算法&#xff09;告诉我们&#xff0c;想判断一个元素是否存在于某个集合中&#xff0c…

c语言指针 字符 字符串

1、sizeof 某个类型或者某个变量在内存中占用字节数。 例如&#xff1a;sizeof(int) ; sizeof(i)&#xff1b;都可以使用 2、运算符& 获取变量的地址。 int i; scanf("%d",&i); 输入变量时&#xff0c;必须使用&运算符。 &操作符只能应…

机器学习100天(二):002 数据预处理之导入数据集

机器学习 100 天,今天讲的是:数据预处理之导入数据集。 首先,我们打开 spyder。新建一个 load_data.py 脚本。 第一步,导入标准库 机器学习常用的标准库有 3 个: 第一个:numpy,用于数据处理。 第二个:matplotlib.pyplot,用于画图。 第三个:pandas,用于数值分析…