队列、栈专题

news2024/9/21 11:06:47

队列、栈专题

    • LeetCode 20. 有效的括号
      • 解题思路
      • 代码实现
    • LeetCode 921. 使括号有效的最少添加
      • 解题思路
      • 代码实现
    • LeetCode 1541. 平衡括号字符串的最少插入次数
      • 解题思路
      • 代码实现
    • 总结

不要纠结,干就完事了,熟练度很重要!!!多练习,多总结!!!

LeetCode 20. 有效的括号

在这里插入图片描述

解题思路

遇到左括号就入栈,遇到右括号就去栈中寻找最近的左括号,看是否匹配,最后记得检查栈是否清空了,这才算匹配完成。

代码实现

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for(char c:s.toCharArray()){
            if(c == '(' || c == '{' || c == '['){
                stack.push(c);
            }else if(!stack.isEmpty() && leftOf(c) == stack.peek()){
                stack.pop();
            }else {
                return false;
            }
        }

        return stack.isEmpty();
    }

    public char leftOf(char c){
        if(c == ')'){
            return '(';
        }else if(c == ']'){
            return '[';
        }else if(c == '}'){
            return '{';
        }
        return ' ';
    }
}

LeetCode 921. 使括号有效的最少添加

在这里插入图片描述

解题思路

核心思路是以左括号为基准,通过维护对右括号的需求数need,来计算最小的插入次数。需要注意两个地方:

  1. 当need == -1的时候意味着什么?

因为只有遇到右括号)的时候才会need–,need == -1意味着右括号太多了,所以需要插入左括号。
比如说s = “))“这种情况,需要插入 2 个左括号,使得s变成”()()”,才是一个合法括号串。

  1. 算法为什么返回res + need?

因为res记录的左括号的插入次数,need记录了右括号的需求,当 for 循环结束后,若need不为 0,那么就意味着右括号还不够,需要插入。
比如说s = “))(“这种情况,插入 2 个左括号之后,还要再插入 1 个右括号,使得s变成”()()()”,才是一个合法括号串。

代码实现

class Solution {
    public int minAddToMakeValid(String s) {
        int res = 0, need = 0;
        for(char c: s.toCharArray()){
            if(c == '('){
                need++;
            }else if(c == ')'){
                need--;
                if(need == -1){
                    res++;
                    need = 0;
                }
            }
        }
        return res+need;
    }
}

LeetCode 1541. 平衡括号字符串的最少插入次数

在这里插入图片描述

解题思路

  1. 当need == -1时,意味着我们遇到一个多余的右括号,显然需要插入一个左括号。
if (s[i] == ')') {
    need--;
    // 说明右括号太多了
    if (need == -1) {
        // 需要插入一个左括号
        res++;
        // 同时,对右括号的需求变为 1
        need = 1;
    }
}
  1. 当遇到左括号时,若对右括号的需求量为奇数,需要插入 1 个右括号。因为一个左括号需要两个右括号嘛,右括号的需求必须是偶数。(记住res和need代表含义不同,一加一减不可抵消,在need==-1时还有额外判断逻辑)
if (s[i] == '(') {
    need += 2;
    if (need % 2 == 1) {
        // 插入一个右括号
        res++;
        // 对右括号的需求减一
        need--;
    }
}

代码实现

class Solution {
    public int minInsertions(String s) {
        int res = 0, need = 0;
        for(char c :s.toCharArray()){
            if(c == '('){
                need+=2;
                if (need % 2 == 1) {
                    res++;
                    need--;
                }
            }else if(c == ')'){
                need--;
                if(need == -1){
                    res++;
                    need = 1;
                }
            }
        }
        return res+need;
    }
}

总结

本题来源于Leetcode中 归属于队列、栈类型题目。
同许多在算法道路上不断前行的人一样,不断练习,修炼自己!
如有博客中存在的疑问或者建议,可以在下方留言一起交流,感谢各位!

觉得本博客有用的客官,可以给个点赞+收藏哦! 嘿嘿

喜欢本系列博客的可以关注下,以后除了会继续更新面试手撕代码文章外,还会出其他系列的文章!

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

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

相关文章

icevision环境安装

Installation - IceVision # 1. git clone 代码# pip 换源&#xff1a; ~/.pip/pip.conf 隐藏文件[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-hostmirrors.aliyun.compip install -e .[all,dev]ImportError: cannot import name Multi…

chatgpt-4它的未来是什么?该如何应用起来?

在当今快节奏的数字通信世界中&#xff0c;ChatGPT已成为一个强大的在线聊天平台&#xff0c;改变了人们互动和沟通的方式。凭借其先进的AI功能、用户友好的界面和创新技术&#xff0c;ChatGPT已成为个人和企业的热门选择。 然而&#xff0c;ChatGPT的未来有望更加激动人心和具…

VSCode的安装以及相关插件配置

VSCode是什么&#xff1f; VSCode严格来说&#xff0c;也是一款编辑器&#xff0c;强大之处在于集成了各种各样的插件。至此往后&#xff0c;将使用VSCode来取代vim。话不多说&#xff0c;步骤如下&#xff1a; 安装步骤 1、VSCode的下载 https://vscode.cdn.azure.cn/stabl…

NSSCTF (3)

[GDOUCTF 2023]hate eat snake 我们打开js源码 很明显这里当score大于60会出flag score = getScore 我们寻找到了getScore方法所在的地方 之后发现他存在于Snake

Python多线程之_thread与threading模块

Python多线程之_thread与threading模块 在Python程序中&#xff0c;多线程的应用程序会创建一个函数&#xff0c;来执行需要重复执行多次的程序代码&#xff0c;然后创建一个线程执行该函数。一个线程是一个应用程序单元&#xff0c;用于在后台并行执行多个耗时的动作。 在多…

DBWeaver 连接H2数据库 详细教程

1.DBWwaver下载网址 https://github.com/dbeaver/dbeaver/releases 2. 软件安装 点击安装文件&#xff0c;一直下一步即可 3. DBWeaver连接H2数据库 3.1打开软件在搜索框里面输入&#xff1a;h2 3.2 查询到h2数据库 3.3 点击选中的数据库&#xff0c;出现这样的页面&#xf…

铁路信号计轴设备简介

设备概述 计轴设备是铁路信号系统中的一个重要组成部分。它的主要功能是&#xff1a; 利用安装在钢轨上的传感器&#xff0c;来探测进入和出清轨道区段的车轮对数&#xff0c;进而判别轨道区段的占用和出清&#xff0c;其作用与轨道电路等效。 根据两站办理发车进路情况及区…

浪涌保护器的类型和应用

我们可能经常遇到电子设备损坏的情况。发生这种情况是由于多种情况造成的&#xff0c;例如大气变化&#xff08;闪电和雷声&#xff09;、电压击穿以及使用压缩机等重型设备。所有这些中断都可能会对电气设备造成破坏。进入这种情况的一种设备是浪涌保护器&#xff0c;也称为浪…

EndNote X9 导入知网文献 插入引用文献 方法

文章目录 1 EndNote X9 导入知网文献2 EndNote X9 插入参考文献常见问题总结3 EndNote X9 快速上手教程&#xff08;毕业论文参考文献管理器&#xff09; 1 EndNote X9 导入知网文献 下载知网参考文献引用&#xff1a; ①下载 引用&#xff1b; ②格式为 EndNote&#xff1b; 知…

流水线三维可视化运维,装配自动化提质增效

大家带来智慧生产线/设备流水线合集。 智慧仓储产线 智慧仓储产线通过对仓储现场的数字化建模&#xff0c;利用先进的物联网、大数据、人工智能等技术&#xff0c;对仓储现场设备、环境、人员进行全流程数字化管理。 为贯彻仓储行业应用的全面性&#xff0c;图扑 HT 应用 Web…

15个提高Javascript开发技巧

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 劈柴不照纹&#xff0c;累死劈柴人。上学的时候就总有那些“小怪物们”总能解出来难题&…

固态硬盘无法识别,怎么办?4招教您解决!

案例&#xff1a;电脑识别不了固态硬盘怎么办&#xff1f; 【我的电脑识别不了固态硬盘&#xff0c;这给我带来了很大的困扰。我尝试了很多方法&#xff0c;还没有解决。求一个有效的解决方法&#xff01;】 固态硬盘在计算机领域中越来越普遍&#xff0c;其快速读取和写入速…

PyCharm十大提高生产力的插件

PyCharm是一个非常流行的Python开发IDE。除了支持Python语言&#xff0c;PyCharm还支持其他流行的语言&#xff0c;如C、C、JavaScript等。PyCharm被广泛使用&#xff0c;是因为它拥有许多方便而实用的插件&#xff0c;这些插件能够显著提高开发者的生产力。下面我们将介绍十大…

鲸鸿动能广告接入如何高效变现流量?

广告是App开发者最常用的流量变现方法之一&#xff0c;当App拥有一定数量用户时&#xff0c;开发者就需要考虑如何进行流量变现&#xff0c;帮助App实现商业可持续增长。 鲸鸿动能流量变现服务是广告服务依托华为终端强大的平台与数据能力为开发者提供的App流量变现服务&#…

用例评审的正确姿势,2个要点不容忽视

&#xff0c;点击蓝字&#x1f446; 关注Agilean&#xff0c;获取一手干货 导语 用例评审的作用已经不言而喻&#xff0c;但是在很多组织的实际落地过程中&#xff0c;却收效甚微。研发管理人员常常会发现即使做了用例评审&#xff0c;一些显而易见的问题还是会出现&#xff1a…

ECharts折线图堆叠和不堆叠的问题

今天配合后台联调数据的时候遇到一种情况 第三条数据为0时候并没有在y轴为0上&#xff0c;而是跟上一条线重合了 ECharts折线图是堆叠的&#xff0c;折线图堆叠的意思就是&#xff1a;第二条线的数值本身的数值第一条线的数值&#xff0c;第三条的数值第二条线图上的数值本身的…

手撕三子棋

代码思路&#xff1a; 1.多文件的使用&#xff08;test.c game.c game.h&#xff09; 2.宏定义的使用 3.打印菜单 4.创建二维数组 5.初始化数组 6.打印棋盘 7.玩家下棋 8.电脑下棋 9.判断输赢 10.代码全析总结 &#xff08;1&#xff09;多文件的使用&#xff1a;…

MySQL 关于缓存的 “杂七杂八”

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

中心极限定理模拟

中心极限定理模拟 文章目录 中心极限定理模拟 [toc] 设服从均值为 μ \mu μ、方差为 σ 2 < ∞ \sigma^2<\infty σ2<∞的任意一个总体&#xff0c;抽取样本量为 n n n的样本&#xff0c;当 n → ∞ n\to\infty n→∞&#xff0c;样本均值 X ˉ \bar{X} Xˉ的抽样分布…

云原生之使用Docker部署webos私有云盘

云原生之使用Docker部署webos私有云盘 一、webos介绍1. webos简介2. webos特点 二、本次实践介绍1. 本次实践简介2. 本次部署环境规划 三、检查本地Docker环境1. 检查Docker版本2. 检查Docker服务状态 四、下载webos镜像五、部署webos1. 创建挂载目录2. 创建webos容器3. 查看we…