力扣第85題-最大矩形

力扣鏈接:85. 最大矩形 - 力扣(LeetCode)

給定一個僅包含?0?和?1?、大小為?rows x cols?的二維二進制矩陣,找出只包含?1?的最大矩形,并返回其面積。

輸入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
輸出:6
解釋:最大矩形如上圖所示。
輸入:matrix = [["0"]]
輸出:0
輸入:matrix = [["1"]]
輸出:1
"""
思路:
此題和84題思路一樣,只是增加的條件,我們可以把他看成多層疊加的
我們可以把二維數組轉換成1維的高度數組
[["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]
]
我們可以看成4個一維的高度數組,高度就是當前行的位置1增加,如果當前行的位置為0則高度就是0第1行為底的柱子:["1","0","1","0","0"]  max = 1
第2行為底的柱子:["2","0","2","1","1"]  max = 3
第3行為底的柱子:["3","1","3","2","2"]  max = 6
第4行為底的柱子:["4","0","0","3","0"]  max = 4"""
from platform import mac_verdef maximalRectangle(matrix):m = len(matrix)n = len(matrix[0])heights_list = []heights = [0] * n# 遍歷每一行for i in range(m):for j in range(n):# 如果當前位置是 '1',則增加高度,否則高度為 0if matrix[i][j] == '1':heights[j] = heights[j] + 1else:heights[j] = 0# heights_list.append(heights[:])   # 此處有坑,heights[:]等于copy,不然append的都是最后一個 heightsheights_list.append(heights.copy())# 這里就可以調用84題的方法來處理def largestRectangleArea(heights):max_area = 0  # 記錄最大值for i in range(len(heights)):  # 循環遍歷每一個索引位置p = i  # 初始p為當前的i的位置while p < len(heights):  # p到達數組末尾,結束循環if heights[p] == 0:  # 當p位置的值是0的時候,直接跳出循環,因為0高度,不能構成矩形breakw = p - i + 1  # 計算當前p位置到i位置的寬度cur_value = w * min(heights[i:p + 1])  # 高取當前i和p位置數組中的最小的值,矩形面積是有最矮的構成的來決定的max_area = max(max_area, cur_value)  # 更新最大面積的值p = p + 1  # 指針右移動return max_areamax_area = 0for heights in heights_list:value = largestRectangleArea(heights)max_area = max(max_area, value)return max_areaprint(maximalRectangle([["1", "0", "1", "0", "0"], ["1", "0", "1", "1", "1"], ["1", "1", "1", "1", "1"], ["1", "0", "0", "1", "0"]]))
print(maximalRectangle([["1"]]))
print(maximalRectangle([["0"]]))

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

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

相關文章

6-創建和查詢

創建&查詢 DDL - 表操作 - 查詢 查詢當前數據庫所有表 查詢庫表之前需要先試用 use 數據庫名 進入數據庫才可以查詢到該數據庫的庫表, 否則將會出現未選擇數據庫的報錯; 如果數據庫中并無數據表, 則會出現 Empty set 的相應結果 SHOW TABLES;切換到 sys 數據庫, 并且查詢庫…

【Java面試】MySQL的聚集索引和非聚集索引的區別?

一、存儲結構的本質差異 物理存儲的哲學沖突 聚集索引的本質是將數據行的物理存儲順序與索引鍵值的邏輯順序強制綁定&#xff0c;這種設計源于計算機科學的局部性原理&#xff08;Locality Principle&#xff09;。 為什么選擇B樹&#xff1f; B樹的平衡多路特性&#xff08;通…

LRU緩存設計與實現詳解

LRU緩存設計與實現詳解 一、LRU緩存核心概念1.1 LRU策略定義1.2 應用場景1.3 核心操作要求 二、數據結構設計&#xff1a;雙向鏈表哈希表2.1 為什么選擇雙向鏈表&#xff1f;2.2 為什么結合哈希表&#xff1f;2.3 節點結構設計&#xff08;雙向鏈表&#xff09;2.4 LRU緩存的邏…

RabbitMQ中,basicAck、basicNack和basicReject是三種核心的消息確認機制

channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); channel.basicReject(message.getMessageProperties().getDeliveryTag(), false); channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); 在RabbitMQ中&#xff0…

UNIAPP入門基礎

一、開發環境準備 1. 安裝 HBuilderX(官方推薦IDE) 下載地址:HBuilderX 官網 版本選擇: App開發版:開箱即用,內置 UniApp 插件 標準版:需手動安裝 UniApp 插件(運行時會提示) 安裝步驟: Windows:雙擊安裝包,勾選“創建桌面快捷方式” macOS:拖拽到 Applications…

前端單點登錄

“前端單點登錄&#xff08;SSO, Single Sign-On&#xff09;”是指在多個系統之間共享用戶登錄狀態&#xff0c;使用戶只需登錄一次&#xff0c;就可以在多個子系統中使用同一身份訪問資源&#xff0c;無需重復登錄。 以下是一個典型的前端單點登錄方案的介紹和實現思路&…

DiNA:擴張鄰域注意力 Transformer

摘要 Transformer 正迅速成為跨模態、跨領域和跨任務中應用最廣泛的深度學習架構之一。在計算機視覺領域&#xff0c;除了持續發展的純 transformer 架構&#xff0c;分層 transformer 也因其優越的性能和在現有框架中易于集成而受到廣泛關注。這類模型通常采用局部化的注意力…

對于“隨機種子”的作用的理解

深度學習系統的兩大組成部分 確定性部分&#xff08;無法通過種子改變&#xff09;&#xff1a; ? 網絡結構&#xff1a;層數、神經元數量、連接方式 ? 學習率&#xff1a;如您所說&#xff0c;這是開發者明確設置的固定值或調度策略 ? 損失函數&#xff1a;MSE、CrossEnt…

C# 委托(調用帶引用參數的委托)

調用帶引用參數的委托 如果委托有引用參數&#xff0c;參數值會根據調用列表中的一個或多個方法的返回值而改變。 在調用委托列表中的下一個方法時&#xff0c;參數的新值&#xff08;不是初始值&#xff09;會傳給下一個方法。例如&#xff0c; 如下代碼調用了具有引用參數的…

Cisco FMC events無法加載并且cpu high故障- Cisco bug

FMC故障 日志無法加載&#xff0c;并且CPU high 95% 經確認是bug問題&#xff0c;需要重置1個monetdb的進程 https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwe47671 https://bst.cloudapps.cisco.com/bugsearch/bug/CSCwi64429 2.1 備份FMC配置 2.2 重置進程 大約為2…

HarmonyOS 公共事件機制介紹以及多進程之間的通信實現(9000字詳解)

HarmonyOS 公共事件機制介紹以及多進程之間的通信 CES(Common Event Service,公共事件服務)為應用程序提供訂閱、發布、退訂公共事件的能力 1. 公共事件的介紹 1.1.1公共事件的分類&#xff1a;公共事件從系統的角度可以分為系統公共事件和自定義公共事件 系統公共事件&#x…

華為云Flexus+DeepSeek征文|快速搭建Dify LLM應用開發平臺教程

【摘要】本文介紹基于華為云Flexus X實例快速部署Dify-LLM應用開發平臺的解決方案。通過創建云服務器&#xff08;2核4G配置&#xff09;、彈性公網IP&#xff08;300Mbps帶寬&#xff09;及安全組&#xff0c;實現平臺私有化部署。方案提供兩種計費模式&#xff08;按需197元/…

【blender】使用bpy對一個obj的不同mesh進行不同的材質貼圖(涉及對bmesh的操作)

BMesh 簡介 BMesh 是 Blender 中用于表示和操作網格數據的底層數據結構系統&#xff0c;它是傳統網格數據結構的高級替代品。 主要特點 靈活拓撲支持&#xff1a; 支持 n-gons&#xff08;任意邊數的多邊形&#xff09;&#xff0c;而不僅僅是三角形和四邊形允許邊和頂點不屬…

如何通過nvm切換本地node環境詳情教程(已裝過node.js更改成nvm)

針對系統已裝過node環境或者第一次安裝nvm環境如何切換nvm 文章目錄 系列文章目錄前言一、刪除原有node環境二、使用步驟 1.下載nvm軟件2.安裝node不同版本3.使用node版本4.配置包文件、安裝包、配置包環境 總結 一、刪除原有node環境 1、刪除之前安裝的node包&#xff0c;以及…

概率論符號和公式整理

本文是由AI生成后&#xff0c;經作者優化整理的文章。個人總結&#xff0c;僅限參考&#xff01; 以下整理了概率論中的常用符號和公式表格&#xff0c;覆蓋基礎知識、關鍵定理和常用分布&#xff1a; 一、基礎集合與事件符號 符號名稱含義/公式說明 S S S樣本空間所有可能結…

SpringSecurity是什么?

Spring Security是Spring生態中的安全框架&#xff0c;用于管理Web應用的認證與權限控制&#xff0c;支持多種登錄方式并集成防護機制&#xff0c;可防范CSRF/XSS等攻擊&#xff0c;保障企業級系統的安全性。 一、核心功能與定位 身份認證&#xff08;Authentication&#xff…

nt!IoSynchronousPageWrite函數分析之atapi!IdeReadWrite----非常重要

第一部分&#xff1a;預分析 1: kd> g Breakpoint 7 hit atapi!IdeReadWrite: f729cb2a 55 push ebp 1: kd> kc # 00 atapi!IdeReadWrite 01 atapi!IdeSendCommand 02 atapi!AtapiStartIo 03 atapi!IdeStartIoSynchronized 04 nt!KeSynchronizeExecuti…

軟考系統架構設計師經驗總結

本文目的 對參加的2025年上半年系統架構設計師考試進行總結提供一些備考思路給未來參加系統架構設計師的同學 個人背景 工作背景 本科計算機與技術&#xff08;學過一些計算機基礎課程&#xff09;&#xff0c;15年畢業后從事過b端&#xff08;人群畫像、營銷、用戶增長、硬…

Tailwind CSS工作原理

文章目錄 前言1. 指令解析與 AST 操作&#x1f6a9; **核心處理流程**&#x1f9e9; **具體流程說明** 2. **配置驅動的樣式生成**3. **JIT 模式&#xff08;Just-In-Time&#xff09;的核心邏輯**4. **插件與自定義擴展**5. **與 PostCSS 管道的協同**6. **優化與 Tree Shakin…

web網頁開發,在線%旅游景點管理%系統demo,基于Idea,vscode,html,css,vue,java,maven,springboot,mysql

經驗心得 兩業務單&#xff0c;都是業務邏輯開發&#xff0c;基本crud&#xff0c;什么是前后端&#xff0c;怎么分離前后端&#xff0c;前后端怎么通訊的&#xff0c;是以什么格式進行通訊這些咱們都需要掌握&#xff0c;后面剩下就是前后端不同層如何優化。管理系統很常見了其…