代码随想录刷题笔记-Day10

1. 用栈实现队列

232.用栈实现队列icon-default.png?t=N7T8https://leetcode.cn/problems/implement-queue-using-stacks/description/

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

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 fals

解题思路 

队列是先进先出的,栈是先进后出的,要把栈底的元素拿到,需要把栈进行逆序,按照这个思路把,出栈后放到一个新的栈内就行了。所以push就是放进入栈内,pop和peek都是去出栈找,如果出栈为空了,就把入栈的元素压入出栈。 

代码

class MyQueue {private Stack<Integer> pushStack;private Stack<Integer> popStack;private int size = 0;public MyQueue() {pushStack = new Stack<Integer>();popStack = new Stack<Integer>();}public void push(int x) {pushStack.push(x);size++;}public int pop() {if (popStack.isEmpty()) {transform();}size--;return popStack.pop();}public int peek() {if (popStack.isEmpty()) {transform();}return (int) popStack.peek();}public boolean empty() {return size == 0;}private void transform() {int count = size;while (count > 0) {popStack.push(pushStack.pop());count--;}}
}

2. 用队列实现栈

225. 用队列实现栈icon-default.png?t=N7T8https://leetcode.cn/problems/implement-stack-using-queues/description/

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

实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

解题思路 

先进先出的队列,想要变成栈,也就是说前面的要给最后一个让位置,可以让前面的全部都重新排队,重新进入队列。

代码

class MyStack {private Queue<Integer> queue;public MyStack() {queue = new LinkedList<Integer>();}public void push(int x) {queue.add(x);}public int pop() {rePush();return queue.poll();}public int top() {rePush();int res = queue.poll();queue.add(res);return res;}public boolean empty() {return queue.isEmpty();}private void rePush() {int count = queue.size() - 1;while (count != 0) {queue.add(queue.poll());count--;}}
}

3. 有效的括号

20. 有效的括号icon-default.png?t=N7T8https://leetcode.cn/problems/valid-parentheses/description/

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

 解题思路

括号匹配是一个典型的栈操作,后进的左括号一定先与后续的右括号进行匹配。所以可以使用一个栈进行字符的入栈,当发现是左括号的时候,就对放入对应的右括号,当发现是右括号,且栈不为空的时候,就判断栈顶元素和当前右括号是不是一样,不一样就false。如果一样就弹出栈顶元素。遍历完毕后如果栈内为空说明全都匹配成功了。

代码

	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();}

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

1047. 删除字符串中的所有相邻重复项icon-default.png?t=N7T8https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/description/

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:

输入:"abbaca"
输出:"ca"
解释:在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同。这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作所以最后的字符串为 "ca"。

解题思路

执行重复删除,也就是说长度为偶数的回文字符串会被删除,可以考虑使用栈,因为回文就是先进入的后判断。对一个字符进行判断,如果和栈顶元素相等就弹出栈顶。最后栈内就是全部的字符串字符。

代码

class Solution {public String removeDuplicates(String s) {Deque<Character> stack = new LinkedList<>();StringBuilder res = new StringBuilder();for (int i = 0; i < s.length(); i++) {if (!stack.isEmpty() && stack.peek() == s.charAt(i)) {stack.pop();} else {stack.push(s.charAt(i));}}while (!stack.isEmpty()) {res.append(stack.pollLast());}return String.valueOf(res);}
}

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

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

相关文章

ID Mapping技术解析:从Redis到Spark GraphX的演进与应用

目录 一、ID Mapping的背景 二、ID Mapping的重要性 三、ID Mapping的方案 3.1 基于Redis的ID Mapping(效率不行)

Java基础数据结构之反射

一.定义 Java的反射机制是在运行状态中的&#xff0c;对于任意一个类都能知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法及属性。既然能拿到&#xff0c;我们就可以修改部分类型信息。这种动态获取信息以及动态调用对象方法的功能…

Django笔记(七):JWT认证

首 前后端分离的项目更多使用JWT认证——Json Web Token。本文记录djangorestframework-simplejwt的使用方式。文档 安装 pip install djangorestframework-simplejwt 配置settings.py: INSTALLED_APPS [rest_framework_simplejwt, ]REST_FRAMEWORK {DEFAULT_AUTHENTICA…

第一讲_JavaScript概述及三种使用方式

JavaScript概述及三种使用方式 1. JavaScript概述1.1 JavaScript 的作用 2 JavaScript使用方式2.1 行内使用2.2 内部使用2.3 外部使用 1. JavaScript概述 JavaScript主页由三部分组成&#xff1a; ECMAScript&#xff1a;规定 JavaScript 核心&#xff0c;定义了语言的基本语…

系统架构设计师教程(十九)大数据架构设计理论与实践

大数据架构设计理论与实践 19.1 传统数据处理系统存在的问题19.2 大数据处理系统架构分析19.2.1 大数据处理系统面临挑战19.2.2 大数据处理系统架构特征19.3 Lambda架构19.3.1 Lambda架构对大数据处理系统的理解19.3.2 Lambda架构应用场景19.3.3 Lambda架构介绍19.3.4 Lambda架…

【ASP.NET Core 基础知识】--身份验证和授权--用户认证的基本概念

用户认证在网络安全中起着至关重要的作用。首先&#xff0c;它可以确保只有经过授权的用户才能访问特定的资源或服务&#xff0c;从而保护了系统和数据的安全。其次&#xff0c;用户认证可以帮助追踪和记录用户的活动&#xff0c;如果出现安全问题&#xff0c;可以追踪到具体的…

无人机调试开源软件

无人机调试开源软件有以下几个&#xff1a; MissionPlanner&#xff1a;一款功能丰富的开源软件&#xff0c;支持多种无人机&#xff0c;包括固定翼、多旋翼和直升机。它提供了实时的飞行数据监控、地图导航、任务规划以及详细的参数调整选项。APMPlanner2.0&#xff1a;专为A…

CSS--Emmet 语法

Emmet语法的前身是Zen coding,它使用缩写,来提高html/css的编写速度, Vscode内部已经集成该语法. 目录 1. 快速生成HTML结构语法 1.1 快速生成HTML结构语法 2. 快速生成CSS样式语法 2.1 快速生成CSS样式语法 1. 快速生成HTML结构语法 1.1 快速生成HTML结构语法 1. 生成标…

【大厂AI课学习笔记】1.1.4 学科和学习路径

一、8大学科 特点是特点 &#xff1a;厚基础、重交叉、宽口径。 八大学科分别是&#xff1a;数学与统计、科学与工程、计算机科学与技术、人工智能核心、认知与神经科学、先进机器人技术、人工智能工具与平台。 每个学科&#xff0c;又向下延伸。 MORE: AI&#xff0c;即人…

【Java】Java类动态替换Class

Java类动态替换Class 通过Java的Class对象&#xff0c;可以实现动态替换Class。 预习几个知识点 getClassLoader Java提供的ClassLoader可用于动态加载的Java类&#xff0c;可以通过多种形式获取ClassLoader。比如通过Class类获取 // 通过Class获取 ClassLoader classLoade…

springIoc以及注解的使用

注解 注解的定义 注解&#xff08;Annotation&#xff09;是一种在 Java 程序中以元数据的形式对代码进行标记和说明的机制。它可以被添加到类、方法、字段、参数等程序元素上&#xff0c;用于提供额外的信息和指示。 也就是说注解是一种标记 注解怎么生效呢&#xff1f; 通…

网络相关知识

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、相关工具3.1 network profiler/ In…

WebSocket实现私信功能

&#xff37;ebSocket实现私信功能 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>配置文件 WebSocketConfig package com.example.common;im…

springboot的服务定位模式

一、文件解析器的例子 在开发中我们可能会解析CSV&#xff0c;JSON等文件类型&#xff0c;显然要用策略模式 我们先定义一个Parser接口 public interface Parser {void parse(String input); } Parser接口的实现类有JSONParser&#xff0c;CSVParser Component("CSV&qu…

gRPC 基本原理

基础知识 RPC的语义是远程过程调用&#xff08;Remote Procedure Call&#xff0c;RPC&#xff09;就是将一个服务调用封装在一个本地方法中&#xff0c;让调用者像使用本地方法一样调用服务&#xff0c;对其屏蔽实现细节。 RPC 会给对应的服务接口名生成一个代理类&#xff0c…

DPlayer m3u8 视频禁止下载

1. 介绍 正常的 m3u8 格式视频通过控制台是无法下载的&#xff0c;但是可以通过插件下载&#xff0c;下面介绍如何规避这个问题。 思路&#xff1a;后端生成一个一次性的密钥&#xff0c;前端放在请求头中&#xff0c;可以防止大部分插件下载。这里只说前端。 2. 实现 集成 …

[docker] 关于docker的面试题

docker命名空间&#xff1f; docker与虚拟机的区别&#xff1f; 容器虚拟机所有容器共享宿主机的内核每个虚拟机都有独立的操作系统和内核通过namespace实现资源隔离&#xff0c;通过cgroup实现限制资源的最大使用量完全隔离。每个虚拟机都有独立的硬件资源秒级启动速度分钟级…

超越 Node.js:Bun 的创新与突破

1. Bun Bun 是一个全新的 JavaScript 运行时&#xff0c;类似于 Node.js 和 Deno&#xff0c;它专注于提供出色的性能和开发者体验。Bun 的一些特点包括&#xff1a; 快速的性能&#xff1a;Bun 旨在提供高性能&#xff0c;无论是启动时间、执行速度还是安装依赖包的速度。 兼…

使用小米手机

额&#xff0c;因为很久以前的华为荣耀手机&#xff08;虽然现在不是华为了&#xff09;退役了&#xff0c;所以使用了小米手机。 文章目录 小米手机和电脑互联 小米手机和电脑互联 这里我用的ubuntu 22.04 和Redmi note 13 pro。其实开始我也没想到&#xff0c;小米居然可以直…

【3.6数据库系统】数据库备份与恢复技术

目录 1.数据备份1.1备份方式1.2备份类型 2.数据库故障与恢复 1.数据备份 1.1备份方式 △冷备份也称为静态备份&#xff0c;别是将数据库正常关闭&#xff0c;在停止状态下&#xff0c;将数据库的文件全部备份(复制)下来。 △热备份也称为动态备份&#xff0c;是利用备份软件&a…