【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.pswp.cn/news/906427.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906427.shtml
英文地址,請注明出處:http://en.pswp.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…