【一天三道算法题】代码随想录——Day14

news2024/9/29 23:31:27

一. 有效的括号

题目链接:力扣

思路:无非三种情况:

                1. 左侧括号多,右侧少

                2. 左右侧一样多,该字符串属于有小括号字符串

                3. 右侧括号多,左侧少

        那么说白了就是要比较左右括号的数量,谁多,谁少,还是相等。

代码:

class Solution {
    public boolean isValid(String s) {
        Deque<Character> deque = new LinkedList<>();
        char ch;
        for (int i = 0; i<s.length(); i++) {
            //将字符串中的字符一个一个取出
            ch = s.charAt(i);
            //碰到左括号就将右括号入栈
            if(ch=='(') {
                deque.push(')');
            } else if(ch=='{') {
                deque.push('}');
            } else if(ch=='[') {
                deque.push(']');
                //若栈为空,证明一个入栈的括号都没有,该字符串根本没有括号
                //如何判断结束?这里使用了短路或 
                //因此首先栈为空,而且栈顶元素不为当前的元素 证明遍历结束了
            } else if(deque.isEmpty() || deque.peek() != ch){
                return false;
            } else {
                //若是右括号,检查是否和栈顶元素匹配
                deque.pop();
            }
        }
        //判断栈中元素是否匹配
        return deque.isEmpty();
    }
}

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

题目链接:力扣

思路:还是扫描,跟上一道题中扫描括号的方法类似,只是从扫描括号变成了扫描单个字符。

扫到第一个就加进去,再扫到就删除,然后将元素逆序输出即可。

这里录哥的gif非常好懂,几乎是看一眼就明白了,推荐!

动态图网址:代码随想录

代码:

class Solution {
    public String removeDuplicates(String s) {
        ArrayDeque<Character> que = new ArrayDeque<>();
        char c;
        for(int i=0; i<s.length(); i++) {
            c = s.charAt(i);
            //若栈为空,且栈顶和当前元素不相等,证明没有相邻
            if(que.isEmpty() || que.peek() != c) {
                //将其压入栈内
                que.push(c);
            } else {    //若上述条件通过,证明栈顶和当前元素相等,即 相邻,将该元素弹出栈
                que.pop();
            }
        }
        //经过上述操作,剩余元素便为不重复元素,将其转换为字符串返回
        String str = "";
        while(!que.isEmpty()) {
            //通过push入栈,再通过pop出栈,实现逆序
            str = que.pop() + str;
        }
        //将字符串返回
        return str;
    }
}

三. 逆波兰式求值

题目链接:力扣

思路:遇到数字则入栈;遇到运算符则取出栈顶两个数字进行计算,并将结果压入栈中。

代码:

class Solution {
    public int evalRPN(String[] tokens) {
        Deque<Integer> que = new LinkedList<>();
        for(String s : tokens) {
            if("+".equals(s)) {
                //将刚入栈的俩元素弹出来,进行“+”运算,运算结束后再push压进栈
                que.push(que.pop() + que.pop());
            } else if("-".equals(s)) {
                que.push(-que.pop() + que.pop());
            } else if("*".equals(s)) {
                que.push(que.pop() * que.pop());
            } else if("/".equals(s)) {
                //因为除法是前面的除以后面的,所以需要交换顺序
                int temp1 = que.pop();
                int temp2 = que.pop();
                que.push(temp2 / temp1);
            } else {
                //若是数字,直接将字符串转换为int,进栈
                que.push(Integer.valueOf(s));
            }
        }
        //将计算完毕的数返回
        return que.pop();
    }
}

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

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

相关文章

KNN背景分割算法

以下代码用OpenCV实现了视频中背景消除和提取的建模&#xff0c;涉及到KNN&#xff08;K近邻算法&#xff09;&#xff0c;真题效果比较好&#xff0c;可以用来进行状态分析。 原理如下&#xff1a; 背景建模&#xff1a;在背景分割的开始阶段&#xff0c;建立背景模型。 前景…

容器部署jenkins定时构建于本地时间不一致

1. Dockerfile FROM jenkins/jenkins:2.411-jdk11 USER root #以下生成密钥方式为旧格式&#xff0c;因为新格式暂不能被"Publish over SSH--->Jenkins SSH Key"功能识别 RUN ssh-keygen -q -m PEM -t rsa -b 2048 -N -f /root/.ssh/id_rsa ADD ./apache-maven…

区分jdbcTemplate操作数据库和mybatis操作数据库

JdbcTemplate和MyBatis是Java中常用的两种数据库操作方式。它们在实现上有一些区别&#xff0c;下面我将为你介绍它们的主要特点和区别&#xff1a; JdbcTemplate&#xff1a; JdbcTemplate是Spring框架中提供的一个类&#xff0c;用于简化JDBC操作。使用JdbcTemplate时&#x…

【设计模式】观察者设计模式解析

目录 一、观察者模式定义 二、观察者模式角色 三、观察者模式类图 四、观察者模式实例 五、观察者模式优缺点 5.1、优点 5.2、缺点 六、观察者模式应用 6.1、Spring 中观察者模式的四个角色 6.2、coding~~~~~~ 一、观察者模式定义 观察者模式(Observer Pattern)&#…

【Unity细节】关于NotImplementedException: The method or operation is not implemented

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity细节和bug ⭐关于NotImplementedException: The method or operation is not implemented.⭐…

【MATLAB第61期】基于MATLAB的GMM高斯混合模型回归数据预测

【MATLAB第61期】基于MATLAB的GMM高斯混合模型回归数据预测 高斯混合模型GMM广泛应用于数据挖掘、模式识别、机器学习和统计分析。其中&#xff0c;它们的参数通常由最大似然和EM算法确定。关键思想是使用高斯混合模型对数据&#xff08;包括输入和输出&#xff09;的联合概率…

MFC自定义控件使用

用VS2005新建一个MFC项目,添加一个Custom Control控件在窗体 我们需要为自定义控件添加一个类。项目,添加类,MFC类 设置类名字,基类为CWnd,你也可以选择CDialog作为基类 类创建完成后,在它的构造函数中注册一个新的自定义窗体,取名为"MyWindowClass" WNDCL…

3ds max 烘培世界坐标到贴图/顶点色

设置Diffuse 为ObjectNormal Normalize(objectNormal) * 0.5 0.5 把Diffuse烘培到顶点色 烘培Diffuse到贴图 模型按UV展开 右键复制 &#xff0c; 到mesh上粘贴 烘培到贴图 UE使用 贴图导入为BC7 float3 n ObjectNormal*2-1; return float3(n.x,n.z,n.y); // x ,z ,y

【深度学习Week3】ResNet+ResNeXt

ResNetResNeXt 一、ResNetⅠ.视频学习Ⅱ.论文阅读 二、ResNeXtⅠ.视频学习Ⅱ.论文阅读 三、猫狗大战Lenet网络Resnet网络 四、思考题 一、ResNet Ⅰ.视频学习 ResNet在2015年由微软实验室提出&#xff0c;该网络的亮点&#xff1a; 1.超深的网络结构&#xff08;突破1000层&…

叶工好容5-日志与监控

目录 前言 平台维度 docker运行状态 cAdvisor-日志采集者 Heapster-日志收集 metrics-server-出生决定成败 kube-state-metrics-不完美中的完美 应用维度 日志 部署方式 输出方式 工具选择 日志接入 监控 serviceMonitor Annotation Prometheus扩展性 Thanos …

StackOverFlow刚刚宣布推出自己的AI产品!

StackOverFlow刚刚宣布要推出自己的AI产品&#xff01; OverflowAI是StackOverFlow即将推出自己AI产品的名字&#xff0c;据称也是以VSCode插件的形式&#xff0c;计划在8月发布。我们来看看都有些什么功能&#xff0c;通过目前的信息看&#xff0c;OverflowAI的主要功能就是&…

漂亮的TAB标签切换

样式 CSS样式 .min-tab-box{position: relative;width: 100%;text-align: initial;padding-left: 550px;top: 10px; } .min-tab-item{position: absolute;--transform: perspective(75em) rotateX(0deg) rotateZ(-0deg) translate(calc(var(--x) * 87%), calc(var(--y) * 86.6…

机器学习笔记之优化算法(三)线搜索方法(步长角度;精确搜索)

机器学习笔记之优化算法——线搜索方法[步长角度&#xff0c;精确搜索] 引言回顾&#xff1a;线搜索方法——方向角度关于收敛性的假设关于单调性的假设下降方向与最速方向 从步长角度观察线搜索方法关于方向向量的假设精确搜索过程 引言 上一节介绍了从方向角度认识线搜索方法…

Python 面向对象的属性与方法

1.私有属性 私有属性用两个下划线开头&#xff0c;表示这个属性只能在本类中使用 class demo_private:# 测试一个私有属性__a 3# 测试一个公有属性b 4print(__a)print(b)class demo_test:print(demo_private.b)print(demo_private.__a)运行结果为&#xff1a; 3 4 4 Attrib…

linux系统将OpenSSH升级到最高版本

一、背景&#xff1a; 公司安全扫描到主机的OpenSSH安全漏洞&#xff0c;由于是虚拟机只能由自己修复&#xff0c;很多OpenSSH的漏洞厂商都没有提供补丁&#xff0c;只能通过禁用scp或者端口的方式临时解决&#xff0c;但是后面使用就不方便了&#xff0c;而且也不安全&#x…

Linux系统挂载Windows的共享文件夹

1&#xff09; 首先点击共享的文件夹 C:\data\ 右键----属性—共享 首先创建挂载目录 /data mkdir /data/ 安装mount.cifs软件包 yum install cifs-utils -y 开始挂载 mount.cifs //192.168.132.142/data /data/ -o userzhaozhengweir,pass123456

[玩转AIGC]sentencepiece训练一个Tokenizer(标记器)

目录 一、前言二、安装三、自己训练一个tokenizer四、模型运行五、拓展 一、前言 前面我们介绍了一种字符编码方式【如何训练一个中英翻译模型】LSTM机器翻译seq2seq字符编码&#xff08;一&#xff09; 这种方式是对一个一个字符编码&#xff0c;丢失了很多信息比如“机器学习…

Flutter:滑动面板

前言 无意中发现了这个库&#xff0c;发现现在很多app中都有类似的功能。以手机b站为例&#xff0c;当你在看视频时&#xff0c;点击评论&#xff0c;视频会向上偏移&#xff0c;下方划出评论界面。 sliding_up_panel SlidingUpPanel是一个Flutter插件&#xff0c;用于创建滑…

从Vue 2到Vue 3:深入了解路由配置的变化与升级建议

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏:《 VUE 》 《 javaScript 》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 目录 &#x1f4d8; 前言 vue2路由配置 &#x1f4df; 一、控制台安装vue路由 &#x1f4df; 二、项目src文件夹下创建r…

kubernetes搭建GitLab并提供本地域名服务及业务微服务接口集成GitLab

目录 搭建GitLab服务镜像准备数据卷脚本部署脚本服务脚本路由脚本登录及配置 GitLab接口及业务微服务上传代码GitLab接口注意事项业务微服务上传代码注意事项 搭建GitLab服务 业务管理平台需要将本地的代码上传并进行版本管理&#xff0c;选择搭建gitlab私服较为合理&#xff0…