【LeetCode 热题 100】有效的括号 / 最小栈 / 字符串解码 / 柱状图中最大的矩形

头像
⭐️个人主页:@小羊
⭐️所属专栏:LeetCode 热题 100
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

      • 有效的括号
      • 最小栈
      • 字符串解码
      • 每日温度
      • 柱状图中最大的矩形
      • 数组中的第K个最大元素


有效的括号

  • 有效的括号

在这里插入图片描述

class Solution {
public:bool isValid(string s) {stack<char> st;for (char e : s){if (st.empty()) st.push(e);else if (st.top() == '(' && e == ')' || st.top() == '{' && e == '}'|| st.top() == '[' && e == ']') st.pop();else st.push(e);}return st.empty();}
};

最小栈

  • 最小栈

在这里插入图片描述

class MinStack {stack<int> st;stack<int> minst;
public:MinStack() {}void push(int val) {st.push(val);if (minst.empty() || val <= minst.top()){minst.push(val);}}void pop() {if (st.top() == minst.top()){minst.pop();}st.pop();}int top() {return st.top();}int getMin() {return minst.top();}
};

字符串解码

  • 字符串解码

在这里插入图片描述

class Solution {
public:string decodeString(string s) {int i = 0;return dfs(s, i);}string dfs(const string& s, int& i){string str;while (i < s.size() && s[i] != ']'){if (isdigit(s[i])){int num = 0;while (i < s.size() && s[i] != '['){num = num * 10 + s[i++] - '0';}i++; // 跳过'['string tmp = dfs(s, i);i++; // 跳过']'while (num--) str += tmp;}else str += s[i++];}return str;}
};

每日温度

  • 每日温度

在这里插入图片描述

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

柱状图中最大的矩形

  • 柱状图中最大的矩形

在这里插入图片描述

  1. 单调递增栈:分别从左向右和从右向左遍历,找到每个柱子左边和右边第一个比它矮的柱子位置。
  2. 计算宽度:对于每个柱子,其左右边界之间的距离即为矩形的宽度,高度为当前柱子的高度。
  3. 求最大值:遍历所有可能的矩形,找出面积最大的一个。

单调栈。

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int n = heights.size();vector<int> left(n), right(n);stack<int> st;for (int i = 0; i < n; i++){while (st.size() && heights[st.top()] >= heights[i]){st.pop();}left[i] = st.empty() ? -1 : st.top();st.push(i);}st = stack<int>();for (int i = n - 1; i >= 0; i--){while (st.size() && heights[st.top()] >= heights[i]){st.pop();}right[i] = st.empty() ? n : st.top();st.push(i);}int res = 0;for (int i = 0; i < n; i++){res = max(res, (right[i] - left[i] - 1) * heights[i]);}return res;}
};

优化。

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int n = heights.size();vector<int> left(n, -1), right(n, n);stack<int> st;for (int i = 0; i < n; i++){while (st.size() && heights[st.top()] > heights[i]){right[st.top()] = i;st.pop();}if (st.size()) left[i] = st.top(); st.push(i);}int res = 0;for (int i = 0; i < n; i++){res = max(res, (right[i] - left[i] - 1) * heights[i]);}return res;}
};

数组中的第K个最大元素

  • 数组中的第K个最大元素

在这里插入图片描述

class Solution {
public:int findKthLargest(vector<int>& nums, int k) {int n = nums.size();for (int i = n - 2 / 2; i >= 0; i--){adjust_down(nums, i, n);}while (--k){swap(nums[0], nums[--n]);adjust_down(nums, 0, n);}return nums[0];}void adjust_down(vector<int>& nums, int parent, int n){int child = 2 * parent + 1;while (child < n) {if (child + 1 < n && nums[child + 1] > nums[child]) child++;if (nums[child] > nums[parent]){swap(nums[child], nums[parent]);parent = child;child = 2 * parent + 1;}else break;}}
};







本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像

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

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

相关文章

Petalinux

Petalinux 命令 参考《UG 1157 PetaLinux Command Line Reference Guide》 //创建petalinux工程 petalinux-create -t project --template zynq -n <name> //配置工程 cd 上一步的工程 petalinux-config --get-hw-description ../xsa_folder///配置Linux内核 petalinux-…

【Qt】在OrinNX上,使用命令安装qtmultimedia5-dev时报错

1、问题描述 在OrinNX+Ubuntu20.04上,使用命令安装qtmultimedia5-dev时报错 sudo apt install qtmultimedia5-devThe following packages have unmet dependencies: qtmultimedia5-dev : Depends: libpulse-dev but it is not going to be installed E: Unable to correct p…

上肢康复机器人设计与临床应用研究

引言 脑卒中、脊髓损伤等神经系统疾病导致的上肢运动功能障碍&#xff0c;严重影响了患者的生活质量。传统康复治疗依赖治疗师手动辅助训练&#xff0c;存在效率低、量化难、人力成本高等问题。上肢康复机器人通过精准的运动控制与生物反馈机制&#xff0c;为实现高效、标准化…

mysql不能聚合之数据清洗逗号

有时候因为数据库不严谨导致了出现有些数字很奇怪例如这样是varchar类型的字符串&#xff0c; 这种数据不能用来运算聚合&#xff0c;那么要怎么办呢&#xff1f; 这样就搞定 REPLACE(your_column, ,, )​​&#xff1a;将字段中的逗号移除&#xff0c;例如将3,553,850.28转换…

chrome 浏览器插件 myTools, 日常小工具。

1. 起因&#xff0c; 目的: 比如&#xff0c;chatgpt, google&#xff0c; 打开网页&#xff0c;就能直接输入文字&#xff0c;然后 grok 就不行&#xff0c;必须用鼠标点一下&#xff0c;才能输入文字。 对我而言&#xff0c;是个痛点&#xff01;写个插件&#xff0c;自动点…

outbox架构解说

Outbox 模式是一种用于实现数据一致性的架构模式&#xff0c;特别是在微服务架构中。 它确保在处理事务时&#xff0c;数据的原子性和最终一致性。 Outbox 模式的详细解说&#xff1a; 1. 概念与背景 背景&#xff1a;在微服务架构中&#xff0c;一个操作可能涉及多个服务&…

喷涂喷漆机器人详解

1. 定义 喷涂喷漆机器人是专为表面涂装设计的自动化工业设备&#xff0c;通过精准控制实现高效、均匀的涂料喷涂。其核心价值在于提升生产效率、保障质量一致性&#xff0c;同时减少材料浪费及环境污染&#xff0c;广泛应用于汽车、航空航天等领域。 2. 结构组成 机械臂&…

DataX:一个开源的离线数据同步工具

DataX 是一个异构数据源离线同步&#xff08;ETL&#xff09;工具&#xff0c;实现了包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源之间稳定高效的数据同步功能。它也是阿里云 DataWorks 数据集成功能的开源版本。 为了解决异构数据源同…

微软家各种copilot的AI产品:Github copilot、Microsoft copilot

背景 大家可能听到很多copilot&#xff0c;比如 Github Copilot&#xff0c;Microsoft Copilot、Microsoft 365 Copilot&#xff0c;有什么区别 Github Copilot&#xff1a;有网页版、有插件&#xff08;idea、vscode等的插件&#xff09;&#xff0c;都是面向于程序员的。Mi…

SpringMVC04所有注解按照使用位置划分| 按照使用层级划分(业务层、视图层、控制层)

目录 一、所有注解按照使用位置划分&#xff08;类、方法、参数&#xff09; 1. 类级别注解 2. 方法级别注解 3. 参数级别注解 4. 字段/返回值注解 二、按照使用层级划分&#xff08;业务层、视图层、控制层&#xff09; 1、控制层&#xff08;Controller Layer&#x…

std::chrono类的简单使用实例及分析

author: hjjdebug date: 2025年 05月 20日 星期二 14:36:17 CST descrip: std::chrono类的简单使用实例及分析 文章目录 1.实例代码:2. 代码分析:2.1 auto t1 std::chrono::high_resolution_clock::now();2.1.1 什么是 system_clock2.1.2 什么是 chrono::time_point?2.1.3 什…

电子电路仿真实验教学平台重磅上线!——深圳航天科技创新研究院倾力打造,助力高校教学数字化转型

在传统电子电路课堂中&#xff0c;实验室的灯光总与高昂的成本、拥挤的设备、反复的耗材损耗相伴&#xff0c;而教师不得不面对这样的现实&#xff1a;有限的硬件资源束缚着教学深度&#xff0c;不可逆的实验风险制约着创新探索&#xff0c;固化的时空场景阻碍着个性化学习。当…

面试真题 - 高并发场景下Nginx如何优化

Nginx是一款高性能的Web服务器和反向代理服务器&#xff0c;以其轻量级、高并发处理能力和稳定性闻名。在面对高并发场景时&#xff0c;合理的配置与优化策略至关重要&#xff0c;以确保服务的稳定性和响应速度。 以下是针对Nginx进行高并发优化的一些关键配置和策略&#xff…

算法与数据结构:质数、互质判定和裴蜀定理

文章目录 质数质数判定质数筛选质因数分解互质判定裴蜀定理 质数 首先回顾「质数」的定义&#xff1a;若一个正整数无法被除了 1 ​和它自身之外的任何自然数整除&#xff0c;则称该数为质数&#xff08;或素数&#xff09;&#xff0c;否则称该正整数为合数。 根据上述定义&…

代码随想录算法训练营第60期第四十二天打卡

大家好&#xff0c;今天还是继续我们的动态规划里面的背包问题&#xff0c;前面我们主要接触的是0-1背包和完全背包&#xff0c;其实这两个背包问题主要就是看看每一件物品我们是否有多件&#xff0c;如果每一件物品我们只能取一次的话那这样我们就是0-1背包&#xff0c;如果每…

第41天-Python+Qt四屏播放器开发指南

一、技术选型与工具准备 核心库: Pyqt5:Python标准GUI库,构建用户界面 os / sys:文件系统操作 开发环境: pip install pyqt5 最终效果与运行 import sys from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout # 添加缺失的布局管理器 from PyQt5.QtCore impor…

upload-labs通关笔记-第12关 文件上传之白名单GET法

目录 一、白名单过滤 二、%00截断 1、%00截断原理 2、空字符 3、截断条件 &#xff08;1&#xff09;PHP版本 < 5.3.4 &#xff08;2&#xff09;magic_quotes_gpc配置为Off &#xff08;3&#xff09;代码逻辑存在缺陷 三、源码分析 1、代码审计 &#xff08;1&…

Node.js数据抓取技术实战示例

Node.js常用的库有哪些呢&#xff1f;比如axios或者node-fetch用来发送HTTP请求&#xff0c;cheerio用来解析HTML&#xff0c;如果是动态网页的话可能需要puppeteer这样的无头浏览器。这些工具的组合应该能满足大部分需求。 然后&#xff0c;可能遇到的难点在哪里&#xff1f;…

数据结构(3)线性表-链表-单链表

我们学习过顺序表时&#xff0c;一旦对头部或中间的数据进行处理&#xff0c;由于物理结构的连续性&#xff0c;为了不覆盖&#xff0c;都得移&#xff0c;就导致时间复杂度为O&#xff08;n&#xff09;&#xff0c;还有一个潜在的问题就是扩容&#xff0c;假如我们扩容前是10…

【Unity】DOTween的常用函数解释

DOTween插件常用函数解释 1.DOTween.To&#xff08;通用变化动画&#xff09; 解释&#xff1a;将某一个值在一定的时间内变化到另一个值&#xff08;通用的函数&#xff09;&#xff0c;可用于大部分的动画变化 使用示例&#xff1a; using UnityEngine; using DG.Tweenin…