当前位置: 首页 > news >正文

算法单调栈—Java版

单调栈

  • 概念:维护栈中元素的单调性,单调增或者单调减。

  • 什么时候用?

    • 要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置。单调栈的本质是空间换时间,在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。
  • 如何用?

    • 当要求数组的每个元素的下一个最大元素时,维护单调递减栈,每次遇到栈顶元素<新进栈元素时,栈顶元素出栈,如果出栈了新的栈顶还是小于新进栈元素,则一直循环出栈进栈,新元素进栈,此时出栈的元素的右边第一个最大元素为新进栈元素。如果新进栈元素<栈顶元素时,则直接进栈。例如有数组 [3,5,1,4,8,3]的对应元素的下一个最大元素为[5,8,4,8,-1,-1],-1表示没有。维护单调递减栈 s=[] ,首先3进栈,s=[3],然后新进栈元素为5,比栈顶元素大,5进栈,3出栈,此时s=[5],即3右边第一个比它大的元素为5,然后是1比栈顶5小直接进栈,s=[5,1];然后遇见4,此时1出栈,4进栈,即第一个比1大的元素是4 ,s=[5,4]。

    • 总结:找第一个/下一个最大元素,维护递减栈;找第一个/下一个最小元素,维护递增栈。

LeetCode练习

import java.util.ArrayDeque;
public class Solution {public String removeDuplicateLetters(String s) {//使用单调栈保持字典序ArrayDeque<Character> stack = new ArrayDeque<Character>();int length = s.length();stack.addLast(s.charAt(0));StringBuffer res = new StringBuffer();for(int i=1;i<length;i++){int flag = 0;Character c = stack.getLast();String sub = s.substring(i,length);while (c>s.charAt(i) && !stack.contains(s.charAt(i)) && sub.contains(""+c) && !stack.isEmpty()){//栈顶元素大于待检测字符且栈中没有该元素,且栈顶元素后续还有 且栈非空 则出栈stack.pollLast();if(!stack.isEmpty())c = stack.getLast();flag = 1;}if(flag==1){// 出栈完成后,待检测字符入栈stack.addLast(s.charAt(i));}if(!stack.contains(s.charAt(i))){  //c<s.charAt(i) &&// 如果待检测字符小于c且栈中不包含它则直接进栈stack.addLast(s.charAt(i));}}while(!stack.isEmpty()){Character c = stack.pollLast();res.append(c);}return res.reverse().toString();}
}

相关文章:

算法单调栈—Java版

单调栈 概念&#xff1a;维护栈中元素的单调性&#xff0c;单调增或者单调减。 什么时候用&#xff1f; 要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置。单调栈的本质是空间换时间&#xff0c;在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元…...

在Linux中进行rocketmq及rocketmq控制台安装与配置

rocketmq下载安装的版本&#xff1a;rocketmq-rocketmq-all-5.0.0.tar.gz rocketmq控制台下载安装的版本&#xff1a;rocketmq-externals-rocketmq-console-1.0.0.tar.gz rocketmq安装 第一步&#xff0c;下载server-jre-8u202-linux-x64.tar.gz安装包。 登录网址&#xff…...

2023年全国最新食品安全管理员精选真题及答案4

百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 31.国家对食品添加剂生产实行____制度。 A.产品注册 B.产品备案 C.登…...

es-07脚本查询

脚本查询 概念 Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能&#xff0c;ES支持多种脚本语言&#xff0c;如painless&#xff0c;其语法类似于Java,也有注释、关键字、类型、变量、函数等&#xff0c;其就要相对于其他脚本高出几倍的性…...

JM员工福利与健康平台,企业关怀Always Online

庄信万丰(Johnson Matthey, JM)&#xff0c;全球性专用化学品公司&#xff0c;是可持续发展技术的全球领导者。在30多个国家和地区拥有13000多名员工。 JM的价值观之一是保护人类和地球。在生产过程中&#xff0c;JM保持对环境保护和能源清洁的高度关注&#xff1b;在员工福利…...

如何使用U-Mail搭建企业邮件服务器?

在当今的信息时代&#xff0c;企业也应该跟上时代的步伐。做好企业信息化建设&#xff0c;对企业事业单位尤为重要。电子邮件作为企业信息化过程中的重要组成部分&#xff0c;在企业内部沟通和外部沟通中发挥着重要作用。目前&#xff0c;有实力的企业已经开始倾向于自己搭建邮…...

用规则来搭建团队:写周报不一定是坏事

你好&#xff0c;我是Smile&#xff0c;一位有二十年工作经验的技术专家。今天我会结合我的经历&#xff0c;和你聊聊搭建技术团队这个话题。 众所周知&#xff0c;技术团队很大程度上决定了一个公司业务的生命力和生命周期&#xff0c;因此技术团队的投入成本往往很高&#x…...

Apollo使用方法

Apollo使用方法1.Apollo相关原理1.Apollo启动方法1.1 软件包方式1.2 脚本方式2.播放数据包2.1 软件包方式2.2 脚本方式3.试验planning模块4.从官网下载场景集其他工具1.Apollo相关原理 cyber / mainboard / mainboard.cc 是Apollo入口 cyber / mainboard / module_argument.cc…...

科研快讯 | 14篇论文被信号处理领域顶级国际会议ICASSP录用

ICASSP 2023 近日&#xff0c;2023年IEEE声学、语音与信号处理国际会议&#xff08;2023 IEEE International Conference on Acoustics, Speech, and Signal Processing&#xff0c;ICASSP 2023&#xff09;发布录用通知&#xff0c;清华大学人机语音交互实验室&#xff08;TH…...

设计模式—策略(Strategy)模式

一、概述策略模式的用意是针对一组算法&#xff0c;将每一个算法封装到具有共同接口的独立的类中&#xff0c;从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化使用策略模式可以把行为和环境分割开来。环境类负责维持和查询行为类&#xff0c;…...

STM32 触摸屏移植GUI控制控件

目录 1、emWin 支持指针输入设备。 2、 模拟触摸屏驱动 3、实现触摸屏的流程 3.1 实现硬件函数 3.2 实现对GUI_TOUCH_Exec()的定期调用 3.3 使用上一步确定的值&#xff0c;在初始化函数LCD_X_Config&#xff08;&#xff09;当中添加对GUI_TOUCH_Calibrate()的调用 4、…...

数仓模型之维度建模

目录 1、数仓架构原则 2、如何搭建一个好的数仓 2.1 建模方法 2.2 建模解决的痛点 2.3 数仓系统满足的特性 2.4 数仓架构设计 3、维度建模 4、案例 5、问题讨论 今天我们来聊聊在数仓模型中举足轻重的维度建模。 简单而言&#xff0c;数据仓库的核心目标是为展现层提…...

Servlet笔记(9):Cookie处理

一、Cookies处理 1、Cookies概念 Cookies是存储在客户端计算机上的文本文件&#xff0c;并保留各种跟踪信息。 识别返回用户的三个步骤 服务器脚本向浏览器发送一组Cookies。例如姓名、年龄或识别号码等。浏览器将这些信息存储在本地计算机上。当下一次浏览器向Web服务器发送…...

骨传导耳机是怎么传声的,选择骨传导耳机的时候需要注意什么?

​骨传导耳机之所以能够成为当下最火的耳机&#xff0c;骨传导技术将声音转化为震动感&#xff0c;通过骨头进行传播&#xff0c;不会堵塞耳朵&#xff0c;就不会影响到周围环境音。这种技术也让骨传导耳机比传统入耳式耳机更安全&#xff0c;无需入耳式设计&#xff0c;避免了…...

达梦数据库DSC集群部署

一、概述 1.1 DSC 集群架构 1.2 架构说明 1、DMDSC 集群是一个多实例、单数据库的系统。 多个数据库实例可以同时访问、修改同一个数据库的数据。 2、数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件, 这些文件保存在共享存储上。 3…...

java 系列之Mybatis

java 系列文章 文章目录java 系列文章前言一、Mybatis 入门1.1 认识 框架&#xff08;了解&#xff09;1.2 认识 ORM&#xff08;要知道&#xff09;1.3 认识 Mybatis&#xff08;要知道&#xff09;二、Mybatis 使用2.1 创建maven项目并导入依赖2.2 准备数据库&#xff0c;包和…...

OBS 进阶 之 摄像头操作

目录 一、摄像头 1、win-dshow插件中,摄像头枚举操作 1)、视频源ID 2)、注册视频源信息...

Linux操作系统基础知识命令参数详解

Linux操作系统 RAID分组 RAID JBOD RAID JBOD的意思是Just a Bunch Of Disks&#xff0c;是将多块硬盘串联起来组成一个大的存储设备&#xff0c;从某种意义上说这种类型不被算作RAID&#xff0c;在维基百科里JBOD同时也被归入非RAID架构。RAID JBOD将所有的磁盘串联成一个单…...

Rust中一些K/V存储引擎

K/V存储引擎的由来可以追溯到20世纪70年代的Berkley DB&#xff0c;而近年来&#xff0c;随着互联网应用的发展&#xff0c;KV存储引擎因其简单高效、可扩展性和适合缓存应用等特点&#xff0c;在分布式存储领域得到了广泛应用。而使用Rust编写KV存储具有内存安全、高性能、并发…...

202302-第四周资讯

山川软件愿为您提供最优质的服务。 您的每一个疑问都会被认真对待&#xff0c;您的每一个建议都将都会仔细思考。 我们希望人人都能分析大数据&#xff0c;人人都能搭建应用。 因此我们将不断完善我们的DEMO、文档、以及视频&#xff0c;期望能在最大程度上快速帮助用户快速…...

H5P交互式视频制作终极指南:快速创建引人入胜的互动学习内容

H5P交互式视频制作终极指南&#xff1a;快速创建引人入胜的互动学习内容 【免费下载链接】h5p-interactive-video 项目地址: https://gitcode.com/gh_mirrors/h5/h5p-interactive-video 在数字化教育时代&#xff0c;如何让视频内容更具互动性和教育价值&#xff1f;H5…...

Qt5 super module网络编程指南:WebSocket、HTTP、MQTT通信实现

Qt5 super module网络编程指南&#xff1a;WebSocket、HTTP、MQTT通信实现 【免费下载链接】qt5 Qt5 super module 项目地址: https://gitcode.com/gh_mirrors/qt/qt5 Qt5 super module是一个功能强大的跨平台应用程序开发框架&#xff0c;提供了丰富的网络编程功能&…...

转行简历不会衔接?AI一键生成,自然过渡无违和感,邀约率飙升3倍!

“我以前是做销售的&#xff0c;想转行产品经理&#xff0c;简历上怎么写才能不让HR觉得我风马牛不相及&#xff1f;” “干了几年运营&#xff0c;现在想尝试开发&#xff0c;简历里除了写熟悉Word、Excel&#xff0c;还能写啥&#xff1f;” “裸辞转行&#xff0c;简历一片…...

AI Agent架构选型实战指南:从行为复杂度到协作粒度

1. 这不是理论课&#xff0c;是我在真实项目里踩坑后画出的AI Agent架构地图你有没有过这种感觉&#xff1a;刚学完LangChain&#xff0c;信心满满想搭个“智能客服”&#xff0c;结果写到第三层条件分支就发现逻辑像毛线团——用户问“查订单”&#xff0c;系统要先判断是否登…...

Monk AI小样本分类实战:用几十张图快速构建可用AI模型

1. 项目概述&#xff1a;用 Monk AI 做分类&#xff0c;但只喂它一小块数据——这到底在解决什么问题&#xff1f;“Classification Using Monk AI by Using a Slice of the Dataset”这个标题乍看平平无奇&#xff0c;甚至有点拗口&#xff0c;但如果你在工业质检、医疗影像初…...

如何在3分钟内免费解决Windows HEIC缩略图预览难题

如何在3分钟内免费解决Windows HEIC缩略图预览难题 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是否经常遇到iPhone拍摄的照…...

Unity WebGL底层原理与实战避坑指南

1. 这不是“把游戏搬上网页”那么简单&#xff1a;一场对Unity WebGL底层逻辑的硬核拆解 “疯狂特技赛车2”这个名字&#xff0c;对很多老玩家而言&#xff0c;是童年街机厅里手心冒汗、摇杆发烫的记忆。而当我在GitHub上第一次点开它被公开的Unity源码仓库&#xff0c;看到 B…...

Go语言Web应用部署与运维实战

Go语言Web应用部署与运维实战 引言 部署和运维是Web应用生命周期的重要环节。本文将深入探讨Go语言Web应用的部署策略和运维最佳实践&#xff0c;帮助开发者构建稳定可靠的生产环境。 一、部署前准备 1.1 编译优化 // main.go package mainimport "github.com/gin-gonic/g…...

物流物联网降本增效:LoRa、NB-IoT等低功耗无线技术选型与实战

1. 项目概述&#xff1a;当“省电”成为物流降本增效的隐形王牌最近和几个做仓储和车队管理的朋友聊天&#xff0c;大家不约而同都在吐槽同一个问题&#xff1a;设备电费和管理成本。一个大型仓库里&#xff0c;成千上万个传感器、电子标签、手持终端&#xff0c;光是电池更换和…...

SPT-AKI存档编辑器:5分钟掌握离线塔科夫角色定制终极方案

SPT-AKI存档编辑器&#xff1a;5分钟掌握离线塔科夫角色定制终极方案 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/gh_mirror…...