《Leetcode》-面試題-hot100-棧

題目列表

  1. 20. 有效的括號 簡單難度 leetcode鏈接

  2. 155. 最小棧 中等難度 leetcode鏈接

  3. 394. 字符串解碼 中等難度 leetcode鏈接

  4. 739. 每日溫度 中等難度 leetcode鏈接

  5. 84. 柱狀圖中最大的矩形 困難難度 leetcode鏈接

題目

(1)有效的括號

題目

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

有效字符串需滿足:

  1. 左括號必須用相同類型的右括號閉合。

  2. 左括號必須以正確的順序閉合。

  3. 每個右括號都有一個對應的相同類型的左括號。

示例 1:

輸入:s = "()"

輸出:true

示例 2:

輸入:s = "()[]{}"

輸出:true

示例 3:

輸入:s = "(]"

輸出:false

示例 4:

輸入:s = "([])"

輸出:true

示例 5:

輸入:s = "([)]"

輸出:false

提示:

  • 1 <= s.length <= 10(4)

  • s 僅由括號 '()[]{}' 組成

思路

class Solution:def isValid(self, s: str) -> bool:stack = []for item in s:if item == '(':stack.append(')')elif item == '{':stack.append('}')elif item == '[':stack.append(']')elif not stack or stack[-1] != item:return Falseelse:stack.pop()return True if not stack else False

(2)最小棧

題目

設計一個支持 pushpoptop 操作,并能在常數時間內檢索到最小元素的棧。

實現 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.

提示:

  • -2(31) <= val <= 2(31) - 1

  • poptopgetMin 操作總是在 非空棧 上調用

  • push, pop, top, and getMin最多被調用 3 * 10(4)

思路

class MinStack(object):def __init__(self):"""initialize your data structure here."""self.stack = []def push(self, x):""":type x: int:rtype: void"""if not self.stack:self.stack.append((x, x))else:self.stack.append((x, min(x, self.stack[-1][1])))def pop(self):""":rtype: void"""self.stack.pop()def top(self):""":rtype: int"""return self.stack[-1][0]def getMin(self):""":rtype: int"""return self.stack[-1][1]# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()

(3)字符串解碼

題目

給定一個經過編碼的字符串,返回它解碼后的字符串。

編碼規則為: k[encoded_string],表示其中方括號內部的 encoded_string 正好重復 k 次。注意 k 保證為正整數。

你可以認為輸入字符串總是有效的;輸入字符串中沒有額外的空格,且輸入的方括號總是符合格式要求的。

此外,你可以認為原始數據不包含數字,所有的數字只表示重復的次數 k ,例如不會出現像 3a2[4] 的輸入。

測試用例保證輸出的長度不會超過 10(5)

示例 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]

思路

class Solution:def decodeString(self, s: str) -> str:stack, res, multi = [], "", 0for c in s:if c == '[':stack.append([multi, res])res, multi = "", 0elif c == ']':cur_multi, last_res = stack.pop()res = last_res + cur_multi * reselif '0' <= c <= '9':multi = multi * 10 + int(c)  # 比如case:s ="100[leetcode]"else:res += creturn res# 鏈接:https://leetcode.cn/problems/decode-string/solutions/19447/decode-string-fu-zhu-zhan-fa-di-gui-fa-by-jyd/
# 輔助棧方法:
## 時間復雜度 O(N),一次遍歷 s
## 空間復雜度 O(N),輔助棧在極端情況下需要線性空間,例如 2[2[2[a]]]

(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 <= 10(5)

  • 30 <= temperatures[i] <= 100

思路

class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:answer = [0]*len(temperatures)stack = [0]for i in range(1,len(temperatures)):# 情況一和情況二if temperatures[i]<=temperatures[stack[-1]]:stack.append(i)# 情況三else:while len(stack) != 0 and temperatures[i]>temperatures[stack[-1]]:answer[stack[-1]]=i-stack[-1]stack.pop()stack.append(i)return answer

(5)柱形圖中最大的矩形

題目

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

示例 1:

輸入:heights = [2,1,5,6,2,3] 輸出:10 解釋:最大的矩形為圖中紅色區域,面積為 10

示例 2:

輸入: heights = [2,4] 輸出: 4

提示:

  • 1 <= heights.length <=10(5)

  • 0 <= heights[i] <= 10(4)

思路

class Solution:def largestRectangleArea(self, heights: List[int]) -> int:# 單調棧'''找每個柱子左右側的第一個高度值小于該柱子的柱子單調棧:棧頂到棧底:從大到小(每插入一個新的小數值時,都要彈出先前的大數值)棧頂,棧頂的下一個元素,即將入棧的元素:這三個元素組成了最大面積的高度和寬度情況一:當前遍歷的元素heights[i]大于棧頂元素的情況情況二:當前遍歷的元素heights[i]等于棧頂元素的情況情況三:當前遍歷的元素heights[i]小于棧頂元素的情況'''# 輸入數組首尾各補上一個0(與42.接雨水不同,本題原首尾兩個柱子可以作為核心柱進行最大面積嘗試)heights.insert(0, 0) # 關鍵代碼heights.append(0)stack = [0]result = 0for i in range(1, len(heights)):# 情況一if heights[i] > heights[stack[-1]]:stack.append(i)# 情況二elif heights[i] == heights[stack[-1]]:stack.pop()stack.append(i)# 情況三else:# 拋出所有較高的柱子while stack and heights[i] < heights[stack[-1]]:# 棧頂就是中間的柱子,主心骨mid_index = stack[-1]stack.pop()if stack:left_index = stack[-1]right_index = iwidth = right_index - left_index - 1height = heights[mid_index]result = max(result, width * height)stack.append(i)return result

結尾

親愛的讀者朋友:感謝您在繁忙中駐足閱讀本期內容!您的到來是對我們最大的支持??

正如古語所言:"當局者迷,旁觀者清"。您獨到的見解與客觀評價,恰似一盞明燈💡,能幫助我們照亮內容盲區,讓未來的創作更加貼近您的需求。

若此文給您帶來啟發或收獲,不妨通過以下方式為彼此搭建一座橋梁: ? 點擊右上角【點贊】圖標,讓好內容被更多人看見 ? 滑動屏幕【收藏】本篇,便于隨時查閱回味 ? 在評論區留下您的真知灼見,讓我們共同碰撞思維的火花

我始終秉持匠心精神,以鍵盤為犁鏵深耕知識沃土💻,用每一次敲擊傳遞專業價值,不斷優化內容呈現形式,力求為您打造沉浸式的閱讀盛宴📚。

有任何疑問或建議?評論區就是我們的連心橋!您的每一條留言我都將認真研讀,并在24小時內回復解答📝。

愿我們攜手同行,在知識的雨林中茁壯成長🌳,共享思想綻放的甘甜果實。下期相遇時,期待看到您智慧的評論與閃亮的點贊身影?!

萬分感謝🙏🙏您的點贊👍👍、收藏?🌟、評論💬🗯?、關注??💚


自我介紹:一線互聯網大廠資深算法研發(工作6年+),4年以上招聘面試官經驗(一二面面試官,面試候選人400+),深諳崗位專業知識、技能雷達圖,已累計輔導15+求職者順利入職大中型互聯網公司。熟練掌握大模型、NLP、搜索、推薦、數據挖掘算法和優化,提供面試輔導、專業知識入門到進階輔導等定制化需求等服務,助力您順利完成學習和求職之旅(有需要者可私信聯系)?

友友們,自己的知乎賬號為“快樂星球”,定期更新技術文章,敬請關注!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93082.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93082.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93082.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GPT-5、Claude-4 同臺亮相!OneEval發布全新“大模型+知識庫”評測白皮書!

OneEval官網地址&#xff1a;http://OneEval.OpenKG.cnOneEval文章鏈接&#xff1a;https://arxiv.org/abs/2506.12577要點導讀 今年4月&#xff0c;OpenKG發布“大模型知識庫”融合能力評估榜單OneEval v1.0。近期&#xff0c;OpenKG在此基礎上&#xff0c;組織撰寫了OneEv…

【最新版】沃德云商協系統全開源+uniapp小程序

一.介紹沃德云商協是一款基于FastAdmin&#xff08;thinkphp&#xff09;Uniapp開發的“多組織”的云服務平臺&#xff0c;打造總商會、總協會、總校友會、工商聯等多組織無障礙溝通合作平臺&#xff0c;讓各大分會、各大分校友會、分組織實現輕松管理&#xff0c;線上宣傳展示…

Wireshark專家模式定位網絡故障:14種TCP異常深度解剖

TCP連接如同精密運轉的傳送帶&#xff0c;每一個異常數據包都是故障的早期信號。作為網絡工程師的“外科手術刀”&#xff0c;Wireshark在TCP故障診斷領域的價值無可替代。本文將通過14個真實故障場景&#xff0c;揭示如何利用Wireshark專家系統&#xff08;Expert System&…

Python Day28 HTML 與 CSS 核心知識點 及例題分析

一、HTML 布局標簽&#xff08;含 H5 語義化標簽&#xff09;傳統布局多使用div標簽&#xff0c;H5 新增語義化標簽增強可讀性&#xff1a;核心知識點header&#xff1a;替代div#header&#xff0c;用于頁面頭部&#xff08;如標題、導航&#xff09;。footer&#xff1a;替代d…

MySQL 數據庫表操作與查詢實戰案例

MySQL 數據庫表操作與查詢實戰案例 在數據庫學習過程中&#xff0c;熟練掌握表的創建、數據插入及各類查詢操作是基礎且重要的技能。本文將通過實際案例&#xff0c;詳細介紹 MySQL 中數據庫表的設計、數據插入以及常用的查詢操作&#xff0c;幫助初學者快速上手。 項目一&…

THCV215一種高速視頻數據收發器,采用低電壓差分信號(LVDS)技術支持高速串行數據傳輸,支持1080p/60Hz高分辨率傳輸

THCV215 是一款符合 V-by-One HS 標準的 高速視頻數據收發器。THCV215和THCV216被設計為支持主機和顯示器之間的視頻數據傳輸。該芯片組可以在20MHz至100MHz的LVDS時鐘頻率下&#xff0c;僅通過一根差分電纜傳輸39bit視頻數據和3bit同步數據。該芯片組有兩個高速數據通道&#…

Linux 系統下 VS Code 降級至 1.85 版本教程:通過歷史版本網站解決兼容性問題

一、問題背景 當前使用的 VS Code 版本為 1.102.3&#xff0c;這一版本可能是未來版本、內部測試版或 Insiders 版本&#xff0c;而目前最新的穩定版屬于 1.8x 系列。由于版本過新&#xff0c;可能導致與部分插件&#xff08;如舊版 Remote-SSH&#xff09;或系統環境不兼容。…

一個基于 PyTorch 的完整模型訓練流程

一個基于 PyTorch 的完整模型訓練流程 flyfish訓練步驟具體操作目的1. 訓練前準備設置隨機種子、配置超參數&#xff08;batch size、學習率等&#xff09;、選擇計算設備&#xff08;CPU/GPU&#xff09;確保實驗可復現&#xff1b;統一控制訓練關鍵參數&#xff1b;利用硬件加…

ffmpeg,ffplay, vlc,rtsp-simple-server,推拉流命令使用方法,及測試(二)

一、常用命令 ffmpeg 推流命令 : ffmpeg -re -i input.mp4 -c copy -f flv rtmp://39.105.129.233/myapp/ffmpeg -re -i input.mp4 -c copy -f flv rtsp://39.105.129.233/myapp/-re 讀取流 -i 輸入文件 -f # 指定推流formatffplay 拉流命令 : ffplay rtmp://39.105.129.233/m…

使用行為樹控制機器人(三) ——通用端口

文章目錄一、通用端口功能實現1. 功能實現1.1 頭文件定義1.2 源文件實現1.3 main文件實現1.4 tree.xml 實現2. 執行結果使用行為樹控制機器人(一) —— 節點使用行為樹控制機器人(二) —— 黑板使用行為樹控制機器人(三) —— 通用端口有了上述前兩節我們已經可以實現節點間的通…

DataDome反爬蟲驗證技術深度解析:無感、滑塊與設備驗證全攻略

DataDome反爬蟲驗證技術深度解析&#xff1a;無感、滑塊與設備驗證全攻略 隨著網絡安全威脅的不斷演進&#xff0c;企業對數據保護的需求日益增強。DataDome作為業界領先的反爬蟲解決方案&#xff0c;以其三層防護機制在眾多知名網站中得到廣泛應用。本文將深入解析DataDome的…

RabbitMQ 消息轉換器詳解

RabbitMQ 消息轉換器詳解 一、為什么需要消息轉換器&#xff1f; RabbitMQ 的消息傳輸協議只識別字節流&#xff1a; 發送對象時&#xff0c;需要序列化成字節數組接收消息時&#xff0c;需要將字節數組反序列化成對象 如果不使用消息轉換器&#xff1a; 需要手動序列化和反序列…

內網穿透的應用-告別“現場救火”!用 cpolar遠程調試讓內網故障排查進入“云時代”

文章目錄前言**常見困境與解決方案****實際應用價值**1. Remote JVM Debug2. 系統要求與環境準備2.1 服務器環境2.2 本地開發環境3. 內網服務器準備及開始3.1 安裝cpolar配置支持遠程ssh登錄3.1.1 什么是cpolar&#xff1f;3.1.2 安裝cpolar3.1.3 注冊及配置cpolar系統服務3.1.…

Cherryusb UAC例程對接STM32內置ADC和PWM播放音樂和錄音(下)=>UAC+STM32 ADC+PWM實現錄音和播放

1. 程序基本框架整個程序框架, 與之前的一篇文章《Cherryusb UAC例程對接STM32內置ADC和DAC播放音樂和錄音(中)>UACSTM32 ADCDAC實現錄音和播放》基本一致, 只是這次將DAC替換成了PWM。因此這里不再贅述了。 2. audio_v1_mic_speaker_multichan_template.c的修改說明(略) 參…

1 JQ6500語音播報模塊詳解(STM32)

系列文章目錄 文章目錄系列文章目錄前言1 JQ6500簡介2 基本參數說明2.1 硬件參數2.2 模塊管腳說明3 控制方式3.1 通信格式3.2 通信指令4 硬件設計5 軟件設計5.1 main.c5.2 board_config5.2.1board_config.h5.2.2 board_config.c5.3 module_config5.3.1 module_config.h5.3.2 mo…

常用數據分析工具

Tableau丨Power BI丨FineBI丨SQL丨影刀丨Excel丨Python丨 參考視頻&#xff1a;【戴師兄】數據分析有哪些必學工具&#xff1f;2023最新版&#xff01;Tableau丨Power BI丨FineBI丨SQL丨影刀丨Excel丨Python丨課程教程自學攻略_嗶哩嗶哩_bilibili 文檔資料&#xff1a; 【戴師兄…

OBOO鷗柏丨智能會議平板教學查詢一體機交互式觸摸終端招標投標核心標底參數要求

整機參數要求&#xff1a;55寸/65寸/75寸/85-86寸/98寸/100寸/110寸/115寸智能會議平板教學觸控一體機/智慧黑板觸摸屏招標投標核心標底參數要求1、整機屏幕采用≥采用超高清原廠原包原裝工業LCD液晶屏面板&#xff1b;具有高色域&#xff0c;顯示動態視頻、web及3D動畫時&…

無人機在環保監測中的應用:低空經濟發展的智能監測與高效治理

一、行業背景與技術革新 隨著全球環境問題日益嚴峻&#xff0c;傳統環保監測手段已難以滿足現代環境管理的需求。固定監測站點建設成本高、覆蓋范圍有限&#xff0c;地面巡查效率低下且存在安全風險。在此背景下&#xff0c;無人機技術憑借其獨特的空間優勢和技術特性&#xff…

PO、BO、VO、DTO、POJO、DAO、DO基本概念

一、圖解二、相關概念 1、PO&#xff08;Persistant Object - 持久化對象&#xff09; 核心定位&#xff1a; 直接與數據庫表結構一一映射的對象&#xff0c;通常用于 ORM&#xff08;對象關系映射&#xff09;框架&#xff08;如 MyBatis、Hibernate&#xff09;中。 特點&…

todoList清單(HTML+CSS+JavaScript)

&#x1f30f;個人博客主頁&#xff1a; 前言&#xff1a; 前段時間學習了JavaScript&#xff0c;然后寫了一個todoList小項目&#xff0c;現在和大家分享一下我的清單以及如何實現的&#xff0c;希望對大家有所幫助 &#x1f525;&#x1f525;&#x1f525;文章專題&#xff…