LeetCode 解題思路 37(Hot 100)

在這里插入圖片描述

解題思路:

  1. 初始化: 初始化最大舉行 max 和棧 stack。
  2. 左右補零: 考慮柱子遞增的邊界情況, 初始化填充柱狀圖 newHeights。
  3. 遍歷處理: 對于每一根遍歷到的柱子 newHeights[i],若柱子高度小于棧口索引,計算左邊最大矩形面積:
  • 右邊界索引:i,棧口元素索引:stack.pop(),左邊界索引:stack.peek()。
  • 當前寬度:i - left - 1,當前高度:newHeights[mid]。

Java代碼:

class Solution {int largestRectangleArea(int[] heights) {int max = 0;Deque<Integer> stack = new LinkedList<Integer>();int[] newHeights = new int[heights.length + 2];for (int i = 0; i < heights.length; i++)newHeights[i + 1] = heights[i];newHeights[0] = newHeights[heights.length + 1] = 0;for (int i = 0; i < newHeights.length; i++) {while (!stack.isEmpty() && newHeights[i] < newHeights[stack.peek()]) {int right = i;int mid = stack.pop();if (!stack.isEmpty()) {int left = stack.peek();int w = right - left - 1;int h = newHeights[mid];max = Math.max(max, w * h);}}stack.push(i);}return max;}
}

復雜度分析:

  • 時間復雜度: O(n)。
  • 空間復雜度: O(n)。

在這里插入圖片描述

解題思路:

  1. 維護大小為k的最小堆??: 堆頂始終是當前堆中最小的元素。
  2. 遍歷數組:
  • 前 k 個元素直接入堆。
  • 后續元素與堆頂比較,若當前元素更大,則替換堆頂并調整堆,否則跳過。
  1. 最終結果?: 堆頂元素即為第 k 大元素。

Java代碼:

class Solution {public int findKthLargest(int[] nums, int k) {MinHeap minHeap = new MinHeap(k);for (int num : nums) {if (minHeap.size < k) {minHeap.offer(num);} else if (num > minHeap.peek()) {minHeap.poll();minHeap.offer(num);}}return minHeap.peek();}static class MinHeap {private int capacity;private int size;private int[] heap;public MinHeap(int capacity) {this.capacity = capacity;this.size = 0;this.heap = new int[capacity + 1];}private int parent(int index) { return index / 2; }private int leftChild(int index) { return index * 2; }private int rightChild(int index) { return index * 2 + 1; }public int peek() {if (size == 0) throw new IllegalStateException();return heap[1];}public void offer(int value) {if (size == capacity) return;heap[++size] = value;siftUp(size);}public int poll() {if (size == 0) throw new IllegalStateException();int min = heap[1];heap[1] = heap[size--];siftDown(1);return min;}private void siftUp(int index) {while (index > 1 && heap[index] < heap[parent(index)]) {swap(index, parent(index));index = parent(index);}} private void siftDown(int index) {while (leftChild(index) <= size) {int minChild = leftChild(index);if (rightChild(index) <= size && heap[rightChild(index)] < heap[minChild])minChild = rightChild(index);if (heap[index] <= heap[minChild]) break;swap(index, minChild);index = minChild;}}private void swap(int i, int j) {int temp = heap[i];heap[i] = heap[j];heap[j] = temp;}}
}

復雜度分析:

  • 時間復雜度: O(nlogk)。
  • 空間復雜度: O(k)。

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

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

相關文章

HTML — 過渡與動畫

HTML過渡與動畫是提升網頁交互體驗的核心技術&#xff0c;主要通過CSS實現動態效果。 過渡 CSS過渡&#xff08;Transition&#xff09;介紹 適用于元素屬性變化時的平滑漸變效果&#xff0c;如懸停變色、尺寸調整。通過定義transition-property&#xff08;過渡屬性&#xf…

跨站請求是什么?

介紹 跨站請求&#xff08;Cross-Site Request&#xff09;通常是指瀏覽器在訪問一個網站時&#xff0c;向另一個域名的網站發送請求的行為。這個概念在 Web 安全中非常重要&#xff0c;尤其是在涉及到“跨站請求偽造&#xff08;CSRF&#xff09;”和“跨域資源共享&#xff…

Web攻防—SSRF服務端請求偽造Gopher偽協議無回顯利用

前言 重學Top10的第二篇&#xff0c;希望各位大佬不要見笑。 SSRF原理 SSRF又叫服務端請求偽造&#xff0c;是一種由服務端發起的惡意請求&#xff0c;SSRF發生在應用程序允許攻擊者誘使服務器向任意域或資源發送未經授權的請求時。服務器充當代理&#xff0c;執行攻擊者構造…

Hibernate:讓對象與數據庫無縫對話的全自動ORM框架

一、為什么需要全自動ORM&#xff1f; 在手動編寫SQL的時代&#xff0c;開發者需要在Java代碼和數據庫表之間來回切換&#xff1a; // Java對象 public class User {private Long id;private String name;// getters and setters }// SQL語句 SELECT * FROM user WHERE id ?…

C語言超詳細指針知識(一)

通過前面一段時間C語言的學習&#xff0c;我們了解了數組&#xff0c;函數&#xff0c;操作符等的相關知識&#xff0c;今天我們將要開始進行指針的學習&#xff0c;這是C語言中較難掌握的一個部分&#xff0c;一定要認真學習&#xff01;&#xff01;&#xff01; 1.內存與地址…

程序化廣告行業(70/89):ABTester系統助力落地頁優化實踐

程序化廣告行業&#xff08;70/89&#xff09;&#xff1a;ABTester系統助力落地頁優化實踐 在程序化廣告領域摸爬滾打多年&#xff0c;深知持續學習和知識共享的重要性。寫這篇博客&#xff0c;就是希望能和大家一起深入探索程序化廣告行業&#xff0c;共同學習、共同進步。今…

項目管理(高軟56)

系列文章目錄 項目管理 文章目錄 系列文章目錄前言一、進度管理二、配置管理三、質量四、風險管理五、真題總結 前言 本節主要講項目管理知識&#xff0c;這些知識聽的有點意思啊。對于技術人想創業&#xff0c;單干的都很有必要聽聽。 一、進度管理 二、配置管理 三、質量 四…

常見的后綴名

.exe .exe&#xff08;“executable”&#xff08;可執行的&#xff09;&#xff09;是 Windows 操作系統中最常見的可執行文件擴展名。此類文件包含了計算機能夠直接運行的機器碼指令。當用戶雙擊 .exe 文件時&#xff0c;操作系統會讀取其中的指令并執行相應的程序或任務。…

XILINX DDR3專題---(1)IP核時鐘框架介紹

1.什么是Reference Clock&#xff0c;這個時鐘一定是200MHz嗎&#xff1f; 2.為什么APP_DATA是128bit&#xff0c;怎么算出來的&#xff1f; 3.APP &#xff1a;MEM的比值一定是1:4嗎&#xff1f; 4.NO BUFFER是什么意思&#xff1f; 5.什么情況下Reference Clock的時鐘源可…

Doris 安裝部署、實際應用及優化實踐:對比 ClickHouse 的深度解析

在實時分析、報表系統以及高并發 OLAP 查詢等場景中&#xff0c;列式存儲數據庫因其卓越的查詢性能逐漸成為主流。Doris 和 ClickHouse 是近年來最受歡迎的兩款開源 OLAP 引擎&#xff0c;本文將系統介紹 Doris 的安裝部署、應用場景及優化實踐&#xff0c;并與 ClickHouse 做一…

OracleLinuxR5U5系統重啟后啟動數據庫oracle23ai

1、切換到oracle用戶 [rootOracleLinux-R9-U5 ~]# su oracle2、查看oracle是否配置了ORACLE_SID [oracleOracleLinux-R9-U5 root]$ cd ~ [oracleOracleLinux-R9-U5 ~]$ cat .bash_profile3、輸出內容如下&#xff1a; [oracleOracleLinux-R9-U5 ~]$ cat .bash_profile # .ba…

【正點原子】STM32MP257 同構多核架構下的 ADC 電壓采集與處理應用開發實戰

在嵌入式系統中&#xff0c;ADC模擬電壓的讀取是常見的需求。如何高效、并發、且可控地完成數據采集與處理&#xff1f;本篇文章通過雙線程分別綁定在 Linux 系統的不同 CPU 核心上&#xff0c;采集 /sys/bus/iio 接口的 ADC 原始值與縮放系數 scale&#xff0c;并在另一個核上…

電商用戶購物行為分析:基于K-Means聚類與分類驗證的完整流程

隨著電商行業的快速發展,用戶行為分析成為企業優化營銷策略、提升用戶體驗的重要手段。通過分析用戶的購物行為數據,企業可以挖掘出用戶群體的消費特征和行為模式,從而制定更加精準的營銷策略。本文將詳細介紹一個基于Python實現的電商用戶購物行為分析系統,涵蓋數據預處理…

AMGCL庫的Backends及使用示例

AMGCL庫的Backends及使用示例 AMGCL是一個用于解決大型稀疏線性方程組的C庫&#xff0c;它提供了多種后端(backends)實現&#xff0c;允許用戶根據不同的硬件和性能需求選擇合適的計算后端。 AMGCL支持的主要Backends 內置Backends: builtin - 默認的純C實現block - 支持塊狀…

Express中間件(Middleware)詳解:從零開始掌握(3)

實用中間件模式25例 1. 基礎增強模式 請求屬性擴展 function extendRequest() {return (req, res, next) > {req.getClientLanguage () > {return req.headers[accept-language]?.split(,)[0] || en;};next();}; } 響應時間頭 function responseTime() {return (r…

05--MQTT物聯網協議

一、MQTT的概念 MQTT 協議快速入門 2025&#xff1a;基礎知識和實用教程 | EMQ 1.MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一種輕量級、基于發布-訂閱模式的消息傳輸協議&#xff0c;適用于資源受限的設備和低帶寬、高延遲或不穩定的網絡環境。它…

數據結構與算法——鏈表OJ題詳解(2)

文章目錄 一、前言二、OJ續享2.1相交鏈表2.2環形鏈表12.2環形鏈表2 三、總結 一、前言 哦了兄弟們&#xff0c;咱們上次在詳解鏈表OJ題的時候&#xff0c;有一部分OJ題呢up并沒有整理完&#xff0c;這一個星期呢&#xff0c;up也是在不斷的學習并且沉淀著&#xff0c;也是終于…

SQL Server AlwaysOn (SQL 查詢數據詳解及監控用途)

修正后的完整查詢 SELECT ar.replica_server_name AS [副本名稱],ar.availability_mode_desc AS [同步模式],DB_NAME(dbr.database_id) AS [數據庫名稱],dbr.database_state_desc AS [數據庫狀態],dbr.synchronization_state_desc AS [同步狀態],dbr.synchronization_health_d…

力扣熱題100刷題day63|49.字母異位詞分組

目錄 一、哈希表相關理論 二、思路 核心思路 三、相關題目 四、總結 一、哈希表相關理論 代碼隨想錄刷題day15|&#xff08;哈希表篇&#xff09;242.有效的字母異位詞、383.贖金信-CSDN博客 二、思路 首先&#xff0c;創建一個map集合&#xff0c;遍歷字符串數組&…

愛普生可編程晶振SG8201CJ和SG8200CJ在胃鏡機器人發揮重要作用

在醫療機器人技術高速發展的今天&#xff0c;胃鏡機器人作為胃腸道疾病診斷與治療的創新設備&#xff0c;正逐漸改變傳統診療模式。其復雜精密的系統需要精準的時間同步與穩定的信號輸出&#xff0c;胃鏡機器人是一種先進的醫療設備&#xff0c;用于無創性地檢查胃部疾病。與傳…