【JavaScript】LeetCode:76-80

文章目录

  • 76 有效的括号
  • 77 最小栈
  • 78 字符串解码
  • 79 每日温度
  • 80 柱形图中最大的矩形

76 有效的括号

在这里插入图片描述

  • 三种不匹配的情况:
    1. ( [ { } ] ( ),最左边的"("多余,即字符串遍历完了,栈还不为空。
    2. [ { ( } } ],中间"( }"不匹配。
    3. [ { } ] ( ) ) ),右边三个")"多余,即字符串还未遍历完,栈空了。
  • 如果遇见左括号,就将对应类型的右括号入栈,方便遇见右括号时进行匹配。
  • 如果遇见右括号,就与栈顶元素进行比较,相同则将栈顶元素出栈,不同则返回false。
  • 在此基础上还可以剪枝操作:if(s.length % 2 != 0) return false;,如果括号的数量是奇数,直接返回false。
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    let st = [];
    for(let i of s){
        if(i == '('){
            st.push(')');
        }else if(i == '{'){
            st.push('}');
        }else if(i == '['){
            st.push(']');
        }else if(i == st[st.length - 1]){
            st.pop();
        }else if(st.length == 0 || i != st[st.length - 1]){
            return false;
        }
    }
    return st.length == 0;
};

77 最小栈

在这里插入图片描述

  • 增加一个辅助栈:minst,栈顶元素放置栈st中的最小值。
  • push():若push进来的数 <= minst的栈顶元素,则将该数加入minst中。
  • pop():若要pop的数 = minst的栈顶元素,则同时将minst.pop()。
  • 保证minst的栈顶元素始终是st中的最小值。
var MinStack = function() {
    this.st = [];
    this.minst = [];
};

/** 
 * @param {number} val
 * @return {void}
 */
MinStack.prototype.push = function(val) {
    this.st.push(val);
    if(this.minst.length == 0 || val <= this.minst[this.minst.length - 1]){
        this.minst.push(val);
    }
};

/**
 * @return {void}
 */
MinStack.prototype.pop = function() {
    if(this.st.pop() == this.minst[this.minst.length - 1]){
        this.minst.pop();
    }
};

/**
 * @return {number}
 */
MinStack.prototype.top = function() {
    return this.st[this.st.length - 1];
};

/**
 * @return {number}
 */
MinStack.prototype.getMin = function() {
    return this.minst[this.minst.length - 1];
};

/**
 * Your MinStack object will be instantiated and called as such:
 * var obj = new MinStack()
 * obj.push(val)
 * obj.pop()
 * var param_3 = obj.top()
 * var param_4 = obj.getMin()
 */

78 字符串解码

在这里插入图片描述

  • num:存放当前括号前的数字,注意:可能是多位数。
  • res:存放当前括号中的字母。
  • st:栈中存放[num,前一个括号到当前括号之间的res]。
  • 遍历字符串数组:
    1. 如果是数字,则num中存数字。
    2. 如果是"[",则将num和前一段的字符串入栈。
    3. 如果是"]",则栈顶元素出栈,将前一段的字符串和num个该段字符串拼接。
    4. 如果是字母,就拼接当前段的字符串。
/**
 * @param {string} s
 * @return {string}
 */
var decodeString = function(s) {
    let st = [];
    let res = "";
    let num = 0;
    for(let i of s){
        if(!isNaN(i)){
            num = num * 10 +  Number(i);
        }else if(i == "["){
            st.push([num, res]);
            res = "";
            num = 0;
        }else if(i == "]"){
            let tmp = st.pop();
            res = tmp[1] + res.repeat(tmp[0]);
        }else{
            res += i;
        }
    }
    return res;
};

79 每日温度

在这里插入图片描述

  • 单调栈
  • 单调递增栈:求左 / 右第一个比当前元素(栈顶元素)大的位置。
  • 单调递减栈:求左 / 右第一个比当前元素(栈顶元素)小的位置。
  • 此题需构造一个单调递增栈st,栈中存储元素对应的下标。
  • 单调栈是为了存放之前遍历过的元素。
  • 遍历温度数组,若当前元素 > 栈顶元素,则记录结果,栈顶元素出栈,当前元素入栈;若当前元素 <= 栈顶元素,当前元素入栈。
  • 结果数组res可以初始化为0,以便于如下情况:温度数组遍历完成后,栈中仍然有元素,此时栈中元素的后面都没有比自己大的值,对应的结果应该为0。
/**
 * @param {number[]} temperatures
 * @return {number[]}
 */
var dailyTemperatures = function(temperatures) {
    let answer = Array(temperatures.length).fill(0);
    let st = [];
    st.push(0);
    for(let i = 1; i < temperatures.length; i++){
        if(temperatures[i] <= temperatures[st[st.length - 1]]){
            st.push(i);
        }else{
            while(st.length != 0 && temperatures[i] > temperatures[st[st.length - 1]]){
                answer[st[st.length - 1]] = i - st[st.length - 1];
                st.pop();
            }
            st.push(i);
        }
    }
    return answer;
};

80 柱形图中最大的矩形

在这里插入图片描述

  • 单调栈
  • 技巧:heights数组首尾各加一个0,以便于第一个数和最后一个数计算矩形面积。
  • 此题需构造一个单调递减栈st,栈中存储元素对应的下标。
  • 遍历柱状图数组,若当前元素 >= 栈顶元素,当前元素入栈;若当前元素 < 栈顶元素,计算矩形面积并更新最大值。
  • 如果当前元素 < 栈顶元素,说明此时以栈顶元素为基准,左、右两端的矩形高度均小于栈顶元素的高度,此时应计算矩形面积,高h = 栈顶元素对应的高度,宽w = 当前元素的下标 - 下一个栈顶元素中存放的下标 - 1,面积s = h * w。
/**
 * @param {number[]} heights
 * @return {number}
 */
var largestRectangleArea = function(heights) {
    let st = [];
    let res = 0;
    heights.unshift(0);
    heights.push(0);
    st.push(0);
    for(let i = 1; i < heights.length; i++){
        if(heights[i] >= heights[st[st.length - 1]]){
            st.push(i);
        }else{
            while(heights[i] < heights[st[st.length - 1]]){
                let h = heights[st[st.length - 1]];
                st.pop();
                let w = i - st[st.length - 1] - 1;
                res = Math.max(res, h * w);
            }
            st.push(i);           
        }
    }
    return res;   
};

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

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

相关文章

机器学习中空间和时间自相关的分析:从理论基础到实践应用

空间和时间自相关是数据分析中的两个基本概念,它们揭示了现象在空间和时间维度上的相互依赖关系。这些概念在各个领域都有广泛应用,从环境科学到城市规划,从流行病学到经济学。本文将探讨这些概念的理论基础,并通过一个实际的野火风险预测案例来展示它们的应用。 图1: 空间自相…

el-radio 点击报错 Element with focus: inputAncestor with aria-hidden....

一、序言 浏览器版本影响的问题&#xff08;与代码无关&#xff0c;可能是web或浏览器相关协议更新导致&#xff09;&#xff0c;不影响功能的使用. 翻译&#xff1a;元素上的Blocked aria-hidden&#xff0c;因为刚刚接收焦点的元素不能对辅助技术用户隐藏。避免在焦点元素或…

DDR Study - LPDDR Initial

参考来源&#xff1a;JESD209-4B 在之前的DDR Study - Basic Understanding中介绍了DDR的基础概念&#xff0c;从这篇文章开始&#xff0c;会基于LPDDR4依次按照如下顺序对LPDDR内容进行简单分析&#xff1a; LPDDR Initial → LPDDR Write Leveling and DQ Training → LPDDR …

Teledyne LeCroy:800G高速以太网一站式自动化测试解决方案(网络打流测试+物理层加压干扰+协议分析)

LinkExpert一站式测试解决方案 LinkExpert 是一款软件应用程序&#xff0c;可对Teledyne LeCroy的协议分析仪和训练器进行自动化硬件控制和管理。除了作为合规性、一致性和验证测试的便捷接口外&#xff0c;它还能轻松地将这些测试添加到自动回归测试流程中。 现在&#xff0c;…

uniapp 获取签名证书 SHA1 自有证书签名打包

1.登录你的Dcloud 账户 2.找到我的应用菜单 3.点开某个应用 4.查看证书详情&#xff0c;里面有SHA1 和别名&#xff0c;密码&#xff0c;下载证书用于云打包&#xff0c;可以选择自有证书&#xff0c;输入别名&#xff0c;密码打包

读数据工程之道:设计和构建健壮的数据系统14源系统

1. 源系统中的数据生成 1.1. 数据工程师的工作是从源系统获取数据&#xff0c;对其进行处理&#xff0c;使其有助于为下游用例提供服务 1.2. 数据工程师的角色将在很大程度上转向理解数据源和目的地之间的相互作用 1.3. 数据工程的最基本的数据管道任务——将数据从A移动到B…

类型转换 与 explicit 关键字作用

例子1&#xff1a; 有时候&#xff0c;如果你不希望编译器帮你自动转换类型&#xff0c;就用关键字 explicit 。 class SampleClass1{ public:operator string() { return string();} };class SampleClass2{ public:explicit operator string() {return string();} };void …

Chrome谷歌浏览器加载ActiveX控件之JT2Go控件

背景 JT2Go是一款西门子公司出品的三维图形轻量化预览解决工具&#xff0c;包含精确3D测量、基本3D剖面、PMI显示和改进的选项过滤器等强大的功能。JT2Go控件是一个标准的ActiveX控件&#xff0c;曾经主要在IE浏览器使用&#xff0c;由于微软禁用IE浏览器&#xff0c;导致JT2Go…

操作系统:进程通信实践-同步又有互斥的信号量机制(详解)

目录 请设计进程既有同步又有互斥的应用场景&#xff0c;并尝试用信号量机制实现。可尝试用有名或无名信号量代码实现上述过程&#xff0c;并给出代码截图、调试过程和运行结果截图。当交换互斥和同步的P&#xff0c;V操作顺序时&#xff0c;程序运行结果是什么&#xff1f; …

【CTF-SHOW】Web入门 Web14 【editor泄露-详】【var/www/html目录-详】

editor泄露问题通常出现在涉及文件编辑器或脚本编辑器的题目中&#xff0c;尤其是在Web安全或Pwn&#xff08;系统漏洞挖掘&#xff09;类别中。editor泄露的本质是由于系统未能妥善处理临时文件、编辑历史或进程信息&#xff0c;导致攻击者可以通过某种途径获取正在编辑的敏感…

CABiNet:用于低延迟语义分割的高效上下文聚合网络

摘要 随着自主机器需求的不断增加&#xff0c;视觉场景理解的像素级语义分割不仅需要准确&#xff0c;而且需要高效&#xff0c;以满足任何潜在的实时应用需求。在本文中&#xff0c;我们提出了CABiNet&#xff08;Context Aggregated Bi-lateral Network&#xff0c;上下文聚…

力扣3191.使二进制数全变成1

给你一个二进制数组 nums 。 你可以对数组执行以下操作 任意 次&#xff08;也可以 0 次&#xff09;&#xff1a; 选择数组中 任意连续 3 个元素&#xff0c;并将它们 全部反转 。 反转 一个元素指的是将它的值从 0 变 1 &#xff0c;或者从 1 变 0 。 请你返回将 nums 中…

Unity Spine优化思路

最近终于闲下来了&#xff0c;于是开始把近期探索到的unity相关优化整理起来。 我们的项目采用的人物表现方式是spine动画&#xff0c;这在2D游戏里算比较常见的解决方案了&#xff0c;但是里面有一些设置需要提前注意一下&#xff0c;否则会造成不必要的性能浪费。 养成读官…

SQL Injection | SQL 注入概述

关注这个漏洞的其他相关笔记&#xff1a;SQL 注入漏洞 - 学习手册-CSDN博客 0x01&#xff1a;SQL 注入漏洞介绍 SQL 注入就是指 Web 应用程序对用户输入数据的合法性没有判断&#xff0c;前端传入后端的参数是可控的&#xff0c;并且参数会带入到数据库中执行&#xff0c;导致…

LabVIEW自动化流动返混实验系统

随着工业自动化的不断发展&#xff0c;连续流动反应器在化工、医药等领域中的应用日益广泛。传统的流动返混实验操作复杂&#xff0c;数据记录和处理不便&#xff0c;基于LabVIEW的全自动流动返混实验系统能自动测定多釜反应器、单釜反应器和管式反应器的停留时间分布&#xff…

pytest框架的allure报告怎么去看

pytest框架的allure报告怎么去看 一、安装jdk和allure1.1安装jdk&#xff08;自行找资料&#xff09;1.2安装Allure 二、编写pytest代码三、执行脚本3.1 运行测试并生成 Allure 结果3.2 你可以使用以下命令来查看生成的报告3.3生成的视图 一、安装jdk和allure 1.1安装jdk&…

LabVIEW提高开发效率技巧----VI继承与重载

在LabVIEW开发中&#xff0c;继承和重载是面向对象编程&#xff08;OOP&#xff09;中的重要概念。通过合理运用继承与重载&#xff0c;不仅能提高代码的复用性和灵活性&#xff0c;还能减少开发时间和维护成本。下面从多个角度介绍如何在LabVIEW中使用继承和重载&#xff0c;并…

机器学习建模分析

机器学习 5.1 机器学习概述5.1.1 机器学习与人工智能5.1.2 python机器学习方法库 5.2 回归分析5.2.1 回归分析原理5.2.2 回归分析实现 5.3 分类分析5.3.1 分类学习原理5.3.2 决策树5.5.3 支持向量机 5.4 聚类分析5.4.1 聚类任务5.4.2 K-means算法 5.5 神经网络和深度学习5.5.1神…

YOLO11来啦 | 详细解读YOLOv8的改进模块!

简介 2024年可谓是YOLO历史性的一年&#xff0c;9月份的最后一天迎来了YOLO2024年的第三部巨作。2024年2月21日&#xff0c;继 2023 年 1 月 YOLOv8 正式发布一年多以后&#xff0c;YOLOv9 才终于到来了&#xff01;YOLOv9提出了可编程梯度信息&#xff08;Programmable Gradi…

msql事务隔离级别 线上问题

1. 对应代码 解决方式&#xff1a; 在事务隔离级别为可重复读&#xff08;RR&#xff09;时&#xff0c;数据库确实通常会记录当前数据的快照。 在可重复读隔离级别下&#xff0c;事务在执行期间看到的数据是事务开始时的数据快照&#xff0c;即使其他事务对数据进行了修改&am…