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

【力扣Hot 100】栈

1. 有效的括号

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

有效字符串需满足:

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

示例 1:

**输入:**s = “()”

**输出:**true

示例 2:

**输入:**s = “()[]{}”

**输出:**true

示例 3:

**输入:**s = “(]”

**输出:**false

示例 4:

**输入:**s = “([])”

**输出:**true

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

题解

class Solution {
public:bool isValid(string s) {int n = s.size();if(n % 2 == 1) return false;unordered_map<char, char> pairs = {{')', '('},{']', '['},{'}', '{'}};stack<char> stk;for(char ch : s) {if(pairs.count(ch)) {if(stk.empty() || stk.top() != pairs[ch]) return false;stk.pop();}else {stk.push(ch);}}return stk.empty();}
};

2. 最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

示例 1:

输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]输出:
[null,null,null,null,-3,null,0,-2]解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.

提示:

  • 231 <= val <= 231 - 1
  • poptop 和 getMin 操作总是在 非空栈 上调用
  • pushpoptop, and getMin最多被调用 3 * 104 次

题解

维护两个栈,一个 stk 表示普通的栈,一个 minstk 表示普通栈的每个栈顶对应的最小值。

示例:

普通栈: [ a, b, c, d

minstk: [ a, min(a, b), min(c, min(a,b)), min(d, min(c, min(a,b)))

class MinStack {
public:stack<int> stk;stack<int> minstk;MinStack() {minstk.push(INT_MAX);    }void push(int val) {minstk.push(min(minstk.top(), val));stk.push(val);}void pop() {minstk.pop();stk.pop();}int top() {return stk.top();}int getMin() {return minstk.top();}
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(val);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/

3. 字符串解码

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

示例 1:

输入:s = "3[a]2[bc]"
输出:"aaabcbc"

示例 2:

输入:s = "3[a2[c]]"
输出:"accaccacc"

示例 3:

输入:s = "2[abc]3[cd]ef"
输出:"abcabccdcdcdef"

示例 4:

输入:s = "abc3[cd]xyz"
输出:"abccdcdcdxyz"

提示:

  • 1 <= s.length <= 30
  • s 由小写英文字母、数字和方括号 '[]' 组成
  • s 保证是一个 有效 的输入。
  • s 中所有整数的取值范围为 [1, 300]

题解

用两个栈,一个存数字,一个存字符串

用一个数字表示当前的次数,一个字符串表示当前的字符串

当遇到“[”,说明即将进入下一级,所以要把数字和字符串都存档一下,存入栈中。

当遇到“]”,说明结束了一个层级,要把数字栈的数字nums.top()拿出来,把字符串栈的字符串strs.top()拿出来,把当前字符串重复nums.top()次,并拼接到strs.top()后面,作为新的当前字符串。

class Solution {
public:string decodeString(string s) {stack<int> nums;stack<string> strs;string str = "";int num = 0;int n = s.size();for(int i = 0; i < s.size(); i ++ ) {if(s[i] >= '0' && s[i] <= '9') {num = num * 10 + s[i] - '0';}else if(s[i] >= 'a' && s[i] <= 'z') {str += s[i];} else if(s[i] == '[') {nums.push(num);num = 0;strs.push(str);str = "";}else {int times = nums.top();nums.pop();for(int j = 0; j < times; j ++ ) {strs.top() += str;}str = strs.top();strs.pop();}}return str;}
};

4, 每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例 1:

输入:temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

示例 2:

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]

示例 3:

输入: temperatures = [30,60,90]
输出:[1,1,0]

提示:

  • 1 <= temperatures.length <= 105
  • 30 <= temperatures[i] <= 100

题解

使用单调栈来解决。

维护一个单调栈,存储温度的下标,并使得栈中从栈底到栈顶温度依次递减。

遍历温度数组,每当当前温度大于栈顶元素的温度,那么不符合单调递减栈,所以要把栈中的元素依次弹出,并更新对应的ans数组。最后再插入当前温度的下标。

(说不清楚,看代码吧。。)

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {int n = temperatures.size();vector<int> ans(n, 0);stack<int> stk;for(int i = 0; i < n; i ++ ) {while(!stk.empty() && temperatures[i] > temperatures[stk.top()]) {ans[stk.top()] = i - stk.top();stk.pop();}stk.push(i);}return ans;}
};

相关文章:

【力扣Hot 100】栈

1. 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应…...

HTTP 与 HTTPS:协议详解与对比

文章目录 概要 一. HTTP 协议 1.1 概述 1.2 工作原理 1.3 请求方法 1.4 状态码 二. HTTPS 协议 2.1 概述 2.2 工作原理 2.3 SSL/TLS 协议 2.4 证书 三. HTTP 与 HTTPS 的区别 四. 应用场景 4.1 HTTP 的应用场景 4.2 HTTPS 的应用场景 概要 HTTP&#xff08;Hy…...

C++编程语言:抽象机制:模板和层级结构(Bjarne Stroustrup)

目录 27.1 引言(Introduction) 27.2 参数化和层级结构(Parameterization and Hierarchy) 27.2.1 生成类型(Generated Types) 27.2.2 模板转换(Template Conversions) 27.3 类模板层级结构(Hierarchies of Class Templates) 27.3.1 模板对比接口(Templates as Interf…...

建筑兔零基础自学python记录22|实战人脸识别项目——视频人脸识别(下)11

这次我们继续解读代码&#xff0c;我们主要来看下面两个部分&#xff1b; 至于人脸识别成功的要点我们在最后总结~ 具体代码学习&#xff1a; #定义人脸名称 def name():#预学习照片存放位置path M:/python/workspace/PythonProject/face/imagePaths[os.path.join(path,f) f…...

在使用export default 导出时,使用的components属性的作用?

文章目录 析与思考回答 析与思考 在 Vue.js 中&#xff0c;使用 export default 导出组件时&#xff0c;通常会通过 components 选项将子组件也导出出来&#xff08;其实是将子组件进行局部注册&#xff09; 。这涉及到 Vue.js 组件的注册机制。为了更清晰地理解这个问题&…...

以太网交换基础(涵盖二层转发原理和MAC表的学习)

在当今的网络世界中&#xff0c;以太网交换技术是局域网&#xff08;LAN&#xff09;的核心组成部分。无论是企业网络、学校网络还是家庭网络&#xff0c;以太网交换机都扮演着至关重要的角色。本文将详细介绍以太网交换的基础知识&#xff0c;包括以太网协议、帧格式、MAC地址…...

Vue 实现通过URL浏览器本地下载 PDF 和 图片

1、代码实现如下&#xff1a; 根据自己场景判断 PDF 和 图片&#xff0c;下载功能可按下面代码逻辑执行 const downloadFile async (item: any) > {try {let blobUrl: any;// PDF本地下载if (item.format pdf) {const response await fetch(item.url); // URL传递进入i…...

【2025最新计算机毕业设计】基于SpringBoot+Vue非遗传承与保护研究系统【提供源码+答辩PPT+文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...

组合总和力扣--39

目录 题目 思路 剪枝优化 代码 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的…...

echarts tooltip高亮某个值,某一项选中高亮状态

需求&#xff1a; 当有多组数据的时候&#xff0c;常常需要对比同一x轴的不同线上的点的数据&#xff0c;并且当数据组过多的时候&#xff0c;也就是线过多的时候&#xff0c;需要明确知道我们当前选中的线是哪条。 解决方案&#xff1a; 通过设置显示x轴的tooltip可以显示同…...

Vue 3:基于按钮切换动态图片展示(附Demo)

目录 前言1. Demo2. 升级Demo3. 终极Demo 前言 原先写过类似的知识点&#xff1a; 详细分析el-breadcrumb 面包屑的基本知识&#xff08;附Demo&#xff09;详细分析el-card中的基本知识&#xff08;附Demo&#xff09; 本篇博客将介绍如何通过点击按钮切换不同的图片&#…...

【Java】泛型与集合篇 —— 泛型

目录 泛型泛型的核心作用泛型类型(类)定义与使用类型参数命名约定泛型方法定义与调用与泛型类的区别通配符上界通配符下界通配符有界类型参数类型擦除类型擦除过程影响好处泛型 泛型的核心作用 泛型是 Java 实现代码复用和类型安全的重要机制。它允许在类、接口和方法中定义…...

【JAVA:list中再定义一个list对象,循环赋值不同的list数据,出现追加重复数据问题】

问题描述&#xff1a; list中再定义一个list对象&#xff0c;循环赋值不同的list数据&#xff0c;结果全部都累加到每条数据中了&#xff0c;每条数据中都出现重复数据。 问题解决&#xff1a; 1.创建树结构方法信息 2.创建一个新的 List 对象&#xff0c;避免引用问题 3.使…...

为什么外贸办公需要跨境专线网络?

你好&#xff0c;今天我们来聊聊SD-WAN技术在出海企业办公中的应用以及其带来的诸多优势。当今出海企业在与海外分支机构或合作伙伴开展高效的网络通讯和数据传输时&#xff0c;面临着许多挑战。此时&#xff0c;SD-WAN作为一种新兴的网络优化技术&#xff0c;正在改变这些企业…...

帆软报表FineReport入门:简单报表制作[扩展|左父格|上父格]

FineReport帮助文档 - 全面的报表使用教程和学习资料 数据库连接 点击号>>JDBC 选择要连接的数据库>>填写信息>>点击测试连接 数据库SQLite是帆软的内置数据库, 里面有练习数据 选择此数据库后,点击测试连接即可 数据库查询 方法一: 在左下角的模板数据集…...

Nginx 在Linux中安装、使用

Nginx 在Linux中安装、使用 一、官网下载Nginx 官网地址&#xff1a;http://nginx.org/en/download.html 二、上传到服务器解压 1、上传到指定的服务器地址 上传的地址自己决定&#xff0c;我上传到 /data/home/prod/nginx/ 2、解压 使用命令&#xff1a; tar -zxvf “你的N…...

在Vue项目中使用three.js在前端页面展示PLY文件或STL文件

前言&#xff1a;这是一个3d打印局域网管理系统的需求 一、安装three.js three.js官网&#xff1a;https://threejs.org/docs/#manual/en/introduction/Installation 我用的是yarn,官网用的是npm 二、使用three.js 1.在script部分导入three.js import * as THREE from thr…...

DeepSeek笔记(二):DeepSeek局域网访问

如果有多台电脑&#xff0c;可以通过远程访问&#xff0c;实现在局域网环境下多台电脑共享使用DeepSeek模型。在本笔记中&#xff0c;首先介绍设置局域网多台电脑访问DeepSeek-R1模型。 一、启动Ollama局域网访问 1.配置环境变量 此处本人的操作系统是Windows11&#xff0c;…...

【LeetCode Hot100 矩阵】矩阵置零、螺旋矩阵、旋转图像、搜索二维矩阵II

矩阵 1. 矩阵置零&#xff08;Set Matrix Zeroes&#xff09;解题思路步骤&#xff1a; 代码实现 2. 螺旋矩阵&#xff08;Spiral Matrix&#xff09;解题思路具体步骤&#xff1a; 代码实现 3. 旋转矩阵 90 度解决思路代码实现 5. 搜索二维矩阵中的目标值解决思路代码实现 1. …...

【设计模式】【创建型模式】建造者模式(Builder)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…...

S32K3xx硬件CRC配置避坑指南:为什么你的CRC校验总出错?可能是这3个配置细节没搞对

S32K3xx硬件CRC配置避坑指南&#xff1a;工程师最常忽略的3个致命细节 在嵌入式系统开发中&#xff0c;CRC校验作为数据完整性的重要保障手段&#xff0c;其配置正确性直接关系到系统可靠性。NXP S32K3xx系列MCU凭借其硬件CRC加速模块&#xff0c;为开发者提供了高效的校验解决…...

3个简单步骤:用GHelper手动风扇控制告别ROG笔记本噪音困扰

3个简单步骤&#xff1a;用GHelper手动风扇控制告别ROG笔记本噪音困扰 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix…...

mPLUG-Owl3-2B Streamlit界面性能优化:首屏加载提速60%的4个关键配置

mPLUG-Owl3-2B Streamlit界面性能优化&#xff1a;首屏加载提速60%的4个关键配置 基于mPLUG-Owl3-2B多模态模型开发的本地图文交互工具&#xff0c;针对模型原生调用的各类报错做全维度修复&#xff0c;适配消费级GPU轻量化推理&#xff0c;采用Streamlit搭建聊天式交互界面&am…...

告别组件绑定困境:Dapr插件架构如何重塑云原生扩展能力

告别组件绑定困境&#xff1a;Dapr插件架构如何重塑云原生扩展能力 【免费下载链接】dapr Dapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration. 项目地址: https:/…...

Apple官网复刻第二阶段day_2:(前端模块化还原苹果官网WATCH海报)

前言 展示效果深耕前端页面复刻开发的同学都清楚&#xff0c;苹果官网是UI视觉、布局规范、模块化编码结合的标杆级实操案例。官网所有产品海报板块视觉统一、层级清晰、适配性拉满&#xff0c;其中WATCH专属海报板块是新手最容易踩坑的特殊场景。和常规iPhone、iPad顶部居中文…...

深入探讨:解决Codeium Chat在Android Studio中的集成问题

前言 在现代软件开发中,集成开发环境(IDE)已成为开发人员必不可少的工具。Android Studio,作为Android开发的首选IDE,提供了丰富的功能来提高开发效率。然而,近期有用户反映在Android Studio中使用Codeium Chat时遇到了问题。本文将深入探讨这一问题,分析原因并提供可能…...

Vibe Coding:大语言模型辅助编程实践指南

1. 项目概述最近在尝试一种新的编程方式——让大语言模型辅助完成编码任务。这种被称为"Vibe Coding"的方法&#xff0c;核心在于将复杂开发任务拆解为可管理的子任务&#xff0c;并通过质量监督机制确保代码产出。经过三个月的实践&#xff0c;我发现这种方式能显著…...

正宗阳澄湖大闸蟹:5款高口碑礼盒推荐 佳节送礼首选

每年中秋送礼&#xff0c;我最怕的一件事&#xff1a;&#x1f449; 买到“假阳澄湖大闸蟹”&#x1f62d;真的不是夸张&#xff0c;现在市面上太多“写着阳澄湖&#xff0c;其实不是阳澄湖”的蟹了…踩过一次坑之后&#xff0c;才慢慢搞明白怎么选。今年这套我选对了&#xff…...

BabelDuck开源AI语言学习工具:部署与实战指南

1. 项目概述&#xff1a;一个为语言学习者量身定制的AI对话伙伴如果你正在学习一门新语言&#xff0c;尤其是英语&#xff0c;并且厌倦了对着课本自言自语&#xff0c;或者觉得找语伴又贵又麻烦&#xff0c;那你可能和我一样&#xff0c;一直在寻找一个能随时随地、耐心陪你练习…...

DeFi交易客户端开发指南:从协议抽象到套利监控实战

1. 项目概述&#xff1a;一个面向加密货币交易的开源客户端如果你在GitHub上搜索过加密货币相关的自动化交易工具&#xff0c;大概率会看到过各式各样的“client”或“bot”。今天要拆解的这个项目——messyvirgo-coin/messyvirgo-openclaw-client&#xff0c;从名字上就透着一…...