DAY11——栈与队列part2

news2024/11/25 20:46:58

双端队列Deque——Double ended Queue

插入和删除为O(1), 查询为O(n)

使用Deque - 廖雪峰的官方网站 (liaoxuefeng.com)

Priority Queue 优先级队列

插入操作 O(1)

取出元素O(logN)——按照元素的优先级取出

底层数据结构为heap,bst...

题目一

最近相关性——使用栈的逻辑解决

1.建立匹配的map对

class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        if (n % 2 == 1) {  //无法匹配
            return false;
        }

        Map<Character, Character> pairs = new HashMap<Character, Character>() {{
            put(')', '(');
            put(']', '[');
            put('}', '{');
        }};
        Deque<Character> stack = new LinkedList<Character>();
        for (int i = 0; i < n; i++) {
            char ch = s.charAt(i);
            if (pairs.containsKey(ch)) {
                if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {
                    return false;
                }
                stack.pop();
            } else {
                stack.push(ch);
            }
        }
        return stack.isEmpty();
    }
}

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.直接push相应地右括号,只需判断元素是否相等

 1.使用栈数据结构,最后转化为字符串

2.直接在字符串上进行操作

class Solution {
    public String removeDuplicates(String s) {
        // 将 res 当做栈
        // 也可以用 StringBuilder 来修改字符串,速度更快
        // StringBuilder res = new StringBuilder();
        StringBuffer res = new StringBuffer();
        // top为 res 的长度
        int top = -1;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            // 当 top > 0,即栈中有字符时,当前字符如果和栈中字符相等,弹出栈顶字符,同时 top--
            if (top >= 0 && res.charAt(top) == c) {
                res.deleteCharAt(top);
                top--;
            // 否则,将该字符 入栈,同时top++
            } else {
                res.append(c);
                top++;
            }
        }
        return res.toString();
    }
}

class Solution {
    public int evalRPN(String[] tokens) {
        Deque<Integer> stack = new LinkedList();
        for (String s : tokens) {
            if ("+".equals(s)) {        // leetcode 内置jdk的问题,不能使用==判断字符串是否相等
                stack.push(stack.pop() + stack.pop());      // 注意 - 和/ 需要特殊处理
            } else if ("-".equals(s)) {
                stack.push(-stack.pop() + stack.pop());
            } else if ("*".equals(s)) {
                stack.push(stack.pop() * stack.pop());
            } else if ("/".equals(s)) {
                int temp1 = stack.pop();
                int temp2 = stack.pop();
                stack.push(temp2 / temp1);
            } else {
                stack.push(Integer.valueOf(s));
            }
        }
        return stack.pop();
    }
}

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

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

相关文章

《Reinforcement Learning: An Introduction》第3章笔记

Chapter 3 Finite Markov Decision 本章正式介绍有限马尔科夫决策过程(finite Markov decision processes, finite MDP)&#xff0c; 它包括第二章介绍的评估性反馈和关联(associative)—在不同情景下选择不同的状态。 MDP是序贯决策问题的经典形式化表达&#xff0c;它的动作…

【玩转Linux操作】硬链接和软连接

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题&#x1f970; 欢迎大家访问“在下小吉.”&#xff08;偷偷告诉你这个是我的大号哦&#…

创客匠人5月活动总结

为了帮助老师做好知识变现、拓客增长&#xff0c;让好老师走进千万家&#xff0c;让知识创造价值&#xff0c;五月&#xff0c;创客匠人组织了一系列线上线下干货满满的赋能活动&#xff01; 一、老蒋商业变现营线上 5月10日-5月14日&#xff0c;在线上举办了首期【老蒋商业变现…

C++作业day1

思维导图 有以下定义&#xff0c;说明哪些量可以改变哪些不可以改变&#xff1f; const char *p; p指向的指向不能修改 const (char *) p; char *const p; p不能改 const char* const p; 都不能修改 …

Python对接亚马逊电商平台SP-API的一些概念理解准备

❝ 除了第三方服务商&#xff0c;其实亚马逊卖家本身也可以通过和SP-API的对接&#xff0c;利用程序来自动化亚马逊店铺销售运营管理中很多环节的工作&#xff0c;简单的应用比如可以利用SP-API的对接&#xff0c;实现亚马逊卖家后台各类报表的定期自动下载以及数据分析整理工…

分享两个小众的办公软件

01 Apache OpenOffice是一款开源办公套件软件&#xff0c;主要用于文档处理、电子表格、演示文稿和数据库管理等方面。它包括Writer、Calc、Impress、Draw和Base五个组件。 Writer是Apache OpenOffice的文本编辑器&#xff0c;可用于创建各种类型的文档&#xff0c;如信函、报…

四、文字到语音模型库之Bark

随着人工智能技术的发展,文本到音频(Text-to-Audio,简称 TTA)转换已经成为一个热门的研究领域,旨在通过深度学习模型将任意文本转换为逼真的音频,包括语音、音乐、声效等。近日,一家名为 Suno 的公司在 GitHub 上开源了一个名为 Bark 的 TTA 模型,引起了广泛关注。Bark…

Java stream多字段分组(groupingBy)

近期的项目里&#xff0c;遇到一个需求&#xff1a;对于含有多个元素的List<Person>&#xff0c;按照其中的某几个属性进行分组&#xff0c;比如Persion::getAge、Persion::getType、Persion::getGender等字段。下面就让我们讨论一下如何比较优雅的按多字段进行分组group…

vue3 使用element plus 打包时 报错

vue3vitetselementPlus中运行正常打包出错 能正常运行&#xff0c;但是打包出错 解决打包时出现导入element plus相关的爆红&#xff0c;导致无法打包的问题 如若出现类似于&#xff1a;Module ‘“element-plus”’ has no exported member ‘ElMessage’. Did you mean to …

使用Fiddler进行Mock测试的原理和方法

叨叨在前&#xff1a;之前工作中&#xff0c;做的纯接口测试&#xff0c;当时公司有自己的Mock平台&#xff0c;可以进行接口Mock测试。后来离开公司后&#xff0c;再想做Mock测试&#xff0c;就只能使用开源工具&#xff0c;或者自己用Flask写Mock了。今儿整理一下&#xff0c…

二、视频换脸

介绍一个优秀的开源项目,DeepFaceLab。开发者是来自俄罗斯的Iperov,同时,他也是曾经应用最广泛的DeepFaceLab的开发者质之一。开源地址:https://github.com/iperov/DeepFaceLab 而这种高质量伪造图像的背后,依托的是“生成对抗网络”(GAN)技术。这类网络由两个 AI 代…

chatgpt赋能python:Python嵌入包:让你的程序更灵活

Python嵌入包&#xff1a;让你的程序更灵活 Python是一种动态、面向对象、高级编程语言&#xff0c;被广泛应用于科学计算、Web开发、大数据、人工智能等领域。Python提供了大量的标准库和第三方库&#xff0c;让开发者能够快速、高效地实现各种功能需求。 但是&#xff0c;在…

ROS EKF 机器人位姿估计功能包:robot_pose_ekf 安装(Ubuntu20.04)

ROS EKF 机器人位姿估计功能包&#xff1a;robot_pose_ekf 安装&#xff08;Ubuntu20.04&#xff09; 功能包简介安装 功能包简介 robot_pose_ekf软件包用于基于来自不同来源的&#xff08;部分&#xff09;位姿测量值来估计机器人的3D姿势。它使用带有6D模型&#xff08;3D位…

想要精通算法和SQL的成长之路 - 两两交换链表中的节点

想要精通算法和SQL的成长之路 - 两两交换链表中的节点 前言一. 两两交换链表中的节点 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 两两交换链表中的节点 原题链接 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改…

1.8w 字的 SQL 优化大全

目录 1、MySQL的基本架构 1&#xff09;MySQL的基础架构图 2&#xff09;查询数据库的引擎 ① show engines; ② show variables like “%storage_engine%”; 3&#xff09;指定数据库对象的存储引擎 2. SQL优化 1&#xff09;为什么需要进行SQL优化&#xff1f; 2&am…

迷你版ChatGPT开源,教你怎么用nanoGPT训练一个写小说的AI机器人!

大家好,我是千与千寻,好久不见,最近太忙了,去医院拔了颗智齿,这不是刚休息一天,就立刻来给大家分享ChatGPT的新奇项目了。 ChatGPT的功能确实是好用,但是我觉得有一个小缺点,就是反应的时间比较慢,原因是GPT-3.5/GPT-4.0的模型体积较大,比较占用内存空间。 同时大模…

MySQL存储引擎介绍、InnoDB和MyISAM的区别

存储引擎是MySQL的核心组件&#xff0c;是存储数据、建立索引、更新/查询数据等技术的实现方式&#xff0c;存储引擎是基于表的&#xff0c;而不是基于库的&#xff0c;所以存储引擎也可被称为表类型。以在创建表的时候&#xff0c;来可以指定选择的存储引擎&#xff0c;如果没…

指针--指针变量的定义和初始化

存放变量的地址需要一种特殊类型的变量&#xff0c;这种特殊的数据类型就是指针&#xff08;Pointer&#xff09;。 具有指针类型的变量&#xff0c;称为指针变量&#xff0c;它时专门用于存储变量的地址值和变量。 其定义形式如下&#xff1a; 类型关键字 * 指针变量名&#x…

【Swift基础语法SnapKit自动布局库的使用】

文章目录 前言playgroundvar 和 let-元组string-字典-数组闭包enum类和对象属性类UI和OC的区别&#xff0c;更简洁懒加载全局文件snap kit的使用top 和 topMargin 总结 前言 最近在学习swift和写项目&#xff0c;给我的感受&#xff0c;语言简洁和安全&#xff0c;在学习了基础…

从GitHub上新拉一个项目并在mac系统下运行遇到的种种问题

如果项目已经被拉下来&#xff0c;现在我们要启动项目。 step1、需要了解该项目是什么&#xff0c;它的作用是什么&#xff0c;以及它可以解决的问题。阅读项目的介绍、文档和示例&#xff0c;确保对项目有一个基本的认识。 step2、设置开发环境&#xff1a;确保您的开发环境…