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

【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.xdnf.cn/news/545131.html

相关文章:

  • 【Linux基础操作】
  • Linux jq 命令使用详解
  • 《安徽日报》聚焦珈和科技AI创新:智慧虫情测报护航夏粮提质丰产
  • Prompt Tuning:高效微调大模型的新利器
  • Vue3 中使用 provide/inject 实现跨层级组件传值失败的原因及解决方案
  • 分析 redis 的 exists 命令有一个参数和多个参数的区别
  • 区间内最远互质点对
  • 编程最接近现实的模拟---随机数
  • QT6 源(113)篇二:阅读与注释工具栏 QToolBar,给出源码
  • 彭博社聚焦Coinbase数据泄露,CertiK联创顾荣辉警示私钥风险与物理攻击
  • 安全工具配置
  • 21. 自动化测试框架开发之Excel配置文件的测试用例改造
  • [特殊字符] React Fiber架构与Vue设计哲学撕逼实录
  • 【Linux笔记】——简单实习一个日志项目
  • 以太联 - Intellinet 闪耀台北 SecuTech 国际安全科技应用博览会
  • C及C++的音频库与视频库介绍
  • MATLAB实现GAN用于图像分类
  • Spring Boot 集成 Elasticsearch【实战】
  • JAVA EE(进阶)_HTML
  • PHP、JAVA、Shiro反序列化
  • Index-AniSora技术升级开源:动漫视频生成强化学习
  • MySQL 8.0 OCP 英文题库解析(六)
  • 系统架构设计(十七):微服务数据一致性和高可用策略
  • anaconda、miniconda、conda的关系及miniconda安装
  • 虚拟环境中VSCode运行jupyter文件
  • 2025年AI搜索引擎发展洞察:技术革新与市场变革
  • 数据库----软考中级软件设计师(自用学习笔记)
  • ShenNiusModularity项目源码学习(27:ShenNius.Admin.Mvc项目分析-12)
  • [创业之路-369]:企业战略管理案例分析-8-战略制定-战略制定起点:差距分析
  • Jenkins服务器配置密钥对