day18【代码随想录】用栈实现队列、用队列实现栈、有效的括号

news2024/10/6 10:26:16

文章目录

  • 前言
  • 一、用栈实现队列(力扣232)
  • 二、用队列实现栈(力扣225)
  • 三、有效的括号(力扣20)


前言

用栈实现队列
用队列实现栈
有效的括号


一、用栈实现队列(力扣232)

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false
    在这里插入图片描述

用两个栈实现即可

class MyQueue {
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    public MyQueue() {
        stackIn = new Stack<>();
        stackOut = new Stack<>();
    }
    
    public void push(int x) {
        stackIn.push(x);
    }
    
    public int pop() {
        if(stackOut.isEmpty()){
            while(!stackIn.isEmpty()){
                stackOut.push(stackIn.pop());
            }
        }
        return stackOut.pop();
    }
    
    public int peek() {
        if(stackOut.isEmpty()){
            while(!stackIn.isEmpty()){
                stackOut.push(stackIn.pop());
            }
        }
        return stackOut.peek();
    }
    
    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }
}

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue obj = new MyQueue();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.peek();
 * boolean param_4 = obj.empty();
 */

在这里插入图片描述

二、用队列实现栈(力扣225)

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
    在这里插入图片描述用一个队列来去模拟栈一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时在去弹出元素就是栈的顺序了。
    Queue和Deque的区别:
    Queue——单端队列;Deque——双端队列
    Queue常用子类——PriorityQueue;Deque常用子类——LinkedList以及ArrayDeque;
class MyStack {

    Deque<Integer> que1;

    public MyStack() {
        que1 = new ArrayDeque<>();
    }
    
    public void push(int x) {
        que1.addLast(x);
    }
    
    public int pop() {
        int size = que1.size();
        size--;
        while(size-->0){
            que1.addLast(que1.peekFirst());
            que1.pollFirst();
        }
        int res = que1.pollFirst();
        return res;
    }
    
    public int top() {
        return que1.peekLast();
    }
    
    public boolean empty() {
        return que1.isEmpty();
    }
}

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */

在这里插入图片描述

三、有效的括号(力扣20)

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
在这里插入图片描述
栈的应用
有三种不匹配的情况:

  • 第一种情况,字符串里左方向的括号多余了 ,所以不匹配。
  • 第二种情况,括号没有多余,但是 括号的类型没有匹配上。
  • 第三种情况,字符串里右方向的括号多余了,所以不匹配。
class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack1;
        stack1 = new Stack<>();
        char[] chars = s.toCharArray();
        if(chars.length==0 || chars.length%2==1){
            return false;
        }
        for(int i=0;i<chars.length;i++){
            char temp = chars[i];
            //处理左括号的场景
            if(temp=='('){
                stack1.push(')');
            }else if(temp=='['){
                 stack1.push(']');
            }else if(temp=='{'){
                 stack1.push('}');
            }
            //处理右括号
            else if(stack1.isEmpty() || stack1.pop()!=temp){
                return false; //不匹配 两种情况栈空了 右括号多余 
            }
        }
        return stack1.isEmpty();

    }
}

在这里插入图片描述


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

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

相关文章

SpringBoot2基础入门

SpringBoot2基础入门学习要求环境要求学习资料01、Spring与SpringBoot1、Spring能做什么1.1、Spring的能力1.2、Spring的生态1.3、Spring5重大升级1.3.1、响应式编程1.3.2、内部源码设计2、为什么用SpringBoot2.1、SpringBoot优点2.2、SpringBoot缺点3、时代背景3.1、微服务3.2…

学生HTML个人网页作业作品:基于web在线汽车网站的设计与实现 (宝马轿车介绍)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

代码随想录刷题记录 day41 单词拆分+背包总结

代码随想录刷题记录 day41 单词拆分背包总结 参考&#xff1a;代码随想录 139. 单词拆分 思想 dp[i] 字符串长度为i&#xff0c;若dp[i]true&#xff0c;表示可以拆分为一个或多个在字典中出现的单词 递推公式 ​ 如果dp[j]true&#xff0c;[j,i]这个区间的子串出现在字典…

[附源码]Python计算机毕业设计大学生兼职平台Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

[附源码]计算机毕业设计基于Java的失物招领平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C++ 多态之虚继承

什么是虚继承 C支持多继承的形式&#xff0c;但若被继承的不同基类又同属与某一个接口类or基类的派生类&#xff0c;那么很容易产生经典的菱形继承问题&#xff0c;这样不可避免的带来了命名冲突&#xff0c;访问不明确的问题&#xff0c;如图所示&#xff1a; 虚继承解决的…

【目标感知:IVIF:轻量级架构】

SELAFUSE: SEARCH A LIGHTWEIGHT ARCHITECTURE FOR TARGET-AWARE INFRARED AND VISIBLE IMAGE FUSION &#xff08;SELAFUSE: 搜索轻量级架构以实现目标感知的红外和可见光图像融合&#xff09; 尽管深度学习技术最近在红外和可见光图像融合方面表现出出色的性能&#xff0c;…

如何使用DNS加速你的浏览器访问速度?

不知道大家有没有遇到过这种情况, 我们访问用浏览器网页无法正常显示, 但是我们使用的QQ却能正常的打开? 这是因为 : 我们在登录QQ的时候是直接访问的腾讯的服务器, 在下载好的QQ客户端已经帮你配置好了所有的IP, 所有没有域名解析的操作, 所以可以正常的登录 解决办法如下…

c#入门-引用变量

引用变量 引用传递&#xff0c;是c#为了以更为安全的方式代替指针做出来的产物。 类似引用类型储存一个地址。但和引用类型不同的是&#xff0c;连对他本身的访问和修改都会转为对原值的访问和修改。 声明引用变量 引用变量在声明是&#xff0c;需要给类型前加上关键字ref。…

02.Ioc容器加载过程-Bean的生命周期深度剖析——四

BeanFactory&#xff1a;使用简单工厂&#xff0c;负责生产Bean FactoryBean&#xff1a;被他修饰的的类&#xff0c;成为特殊的类&#xff0c;调用getObgrct()得到最终的类。。。用于类的实现接口重写方法&#xff0c;从而扩展功能 IOC再总结&#xff1a; 实例化AnnotationCo…

【阅读笔记】《人月神话》思想提炼

文章目录前言1. 衡量工作量1.1. 单位1.2. 工作量与人月&#xff08;人天&#xff09;的关系1.2.1 忽略了沟通成本1.2.2 忽略了需求的特征2. 外科手术团队 —— 少部分人主导项目2.1. 执行方式2.2. 遵守的理念3. 警惕“遗留需求”4. 管理进度4.1 不要泄气4.2. 设定合适的里程碑并…

java项目_第170期ssm二手手机回收平台系统_ssm毕业设计_计算机毕业设计

java项目-第170期ssm二手手机回收平台系统-ssm毕业设计_计算机毕业设计 【源码请到下载专栏下载】 今天分享的项目是《ssm二手手机回收平台系统》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、手机商城、新闻资讯、跳转到后台…

MRR和ICP

MRR和ICPMulti-Range Read优化ICP索引下推优化Multi-Range Read优化 MySQL5.6版本开始支持Multi-Range Read&#xff08;MRR&#xff09;优化。Multi-Range Read优化的目的就是为了减少磁盘的随机访问&#xff0c;并且将随机访问转化为较为顺序的数据访问&#xff0c;这对于IO…

每天进步一点点 -- pytorch学习:张量的介绍与创建

推荐查看的文档&#xff1a;机器视觉全栈|机器视觉教程|docsify|pytorch官方教程中文版|opencv-python官方教程中文版|open3D(0.15.1)官方教程中文版 Tensors个人理解为在GPU上工作的数组和矩阵&#xff0c;既然是数组和矩阵&#xff0c;那么里面也保存一些类型的内容&#xf…

圣天诺加密狗(HASP)破解

圣天诺加密狗&#xff08;HASP&#xff09;破解 一、编写测试程序 dll代码&#xff1a; #include "pch.h" #include<stdlib.h> BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {switch (ul_reason_for_call){case D…

[附源码]计算机毕业设计和vue的茶文化交流平台的设计与实现Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

SVG 实现拟物态圆环进度条

前言 &#x1f44f;SVG 实现拟物态圆环进度条&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现步骤 定义一个圆角矩形作为父容器&#xff0c;背景色为–bg --bg: #edf1f5;<div class"container">&l…

lunar.js 基本使用学习笔记

文章目录lunar 基本使用学习笔记介绍基本使用部分文档 API 转载阳历相关的方法 APISolar 阳历阳历实例化阳历对象可以使用多种字符串输出方式&#xff1a;获取年、月、日儒略日获取星期判断是否闰年获取节日星座阳历日期推移&#xff08;可**跳过节假日、周六周日**&#xff09…

[附源码]Nodejs计算机毕业设计基于Java的医院预约挂号系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

SpringMVC的传参方式?

Request参数传递 1. Servlet传统API 2. Map/Model/ModelMap 作用域&#xff1a;request Map 是原生态的JDK类 Model/ModelMap 是Spring的类 除了来源不同&#xff0c;传递参数的功能都一致&#xff0c;用哪个都可以 Session参数传递 1. 传统方法HttpServletSession 2. …