Leetcode 3359. 查找最大元素不超過 K 的有序子矩陣【Plus題】

1.題目基本信息

1.1.題目描述

給定一個大小為 m x n 的二維矩陣 grid。同時給定一個 非負整數 k。

返回滿足下列條件的 grid 的子矩陣數量:

子矩陣中最大的元素 小于等于 k。

子矩陣的每一行都以 非遞增 順序排序。

矩陣的子矩陣 (x1, y1, x2, y2) 是通過選擇所有滿足 x1 <= x <= x2 且 y1 <= y <= y2 的 grid[x][y] 元素組成的矩陣。

1.2.題目地址

https://leetcode.cn/problems/find-sorted-submatrices-with-maximum-element-at-most-k/description/

2.解題方法

2.1.解題思路
單調棧

時間復雜度:O(n)

2.2.解題步驟
第一步,構建rows矩陣,rows[i][j]表示從mat[i][j]開始向左連續非嚴格遞增且小于等于k的元素的個數(包括本身)

第二步,遍歷每一列,列號記為j,再遍歷每列中的每行,行號即為i

2.1.構建每一列的維護變量。total維護以(i,j)為右下角的全為1的子矩陣個數(如果該列的rows[i][j]非嚴格遞增,則就等于前綴和);stack維護隨著rows[i][j]嚴格遞增的單調棧,存儲單元形式為(rows[i][j],height*=rows矩陣中(i,j)上面連續不小于rows[i][j]的個數+1)

2.2.遍歷每一列,更新total和stack,并將total更新到結果變量result中。total更新:如果rows[i][j]大于或等于單調棧棧頂的元素,則直接將rows[i][j]增加到total中,并入棧即可;如果小于,則將大的元素從棧中彈出,并從total中切除多余的子矩陣數(相當于切成一個非嚴格遞增的rows[i][j]序列)

3.解題代碼

Python代碼

class Solution:def countSubmatrices(self, grid: List[List[int]], k: int) -> int:# 思路:單調棧# 參考:Leetcode 1504. 統計全 1 子矩形mat = gridm, n = len(mat), len(mat[0])# 第一步,構建rows矩陣,rows[i][j]表示從mat[i][j]開始向左連續非嚴格遞增且小于等于l的元素的個數(包括本身)rows = [[0] * n for _ in range(m)]for i in range(m):for j in range(n):if mat[i][j] <= k:if j > 0 and mat[i][j] <= mat[i][j - 1]:rows[i][j] = rows[i][j - 1] + 1else:rows[i][j] = 1# 第二步,遍歷每一列,列號記為j,再遍歷每列中的每行,行號即為iresult = 0for j in range(n):# 2.1.構建每一列的維護變量。total維護以(i,j)為右下角的全為1的子矩陣個數(如果該列的rows[i][j]非嚴格遞增,則就等于前綴和);stack維護隨著rows[i][j]嚴格遞增的單調棧,存儲單元形式為(rows[i][j],height*=rows矩陣中(i,j)上面連續不小于rows[i][j]的個數+1)total = 0stack = []# 2.2.遍歷每一列,更新total和stack,并將total更新到結果變量result中。total更新:如果rows[i][j]大于或等于單調棧棧頂的元素,則直接將rows[i][j]增加到total中,并入棧即可;如果小于,則將大的元素從棧中彈出,并從total中切除多余的子矩陣數(相當于切成一個非嚴格遞增的rows[i][j]序列)for i in range(m):height = 1while stack and stack[-1][0] >= rows[i][j]:preRow, preHeight = stack.pop()height += preHeighttotal -= (preRow - rows[i][j]) * preHeighttotal += rows[i][j]stack.append([rows[i][j], height])result += totalreturn result

4.執行結果

在這里插入圖片描述

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

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

相關文章

如何在 Ubuntu 22.04 上安裝、配置、使用 Nginx

如何在 Ubuntu 22.04 上安裝、配置、使用 Nginx&#xff1f;-阿里云開發者社區 更新應用 sudo apt updatesudo apt upgrade檢查必要依賴并安裝 sudo apt install -y curl gnupg2 ca-certificates lsb-release安裝nginx sudo apt install -y nginx# 啟動nginx sudo systemct…

Linux:顯示 -bash-4.2$ 問題(CentOS 7)

文章目錄 一、原因二、錯誤示例三、解決辦法 一、原因 在 CentOS 7 系統中&#xff0c;如果你看到命令行提示符顯示為 -bash-4.2$&#xff0c;一般是 Bash shell 正在運行&#xff0c;并且它沒有找到用戶的個人配置文件&#xff0c;或者這些文件有問題而未能成功加載。這個提示…

QT6 源(34):隨機數生成器類 QRandomGenerator 的源碼閱讀

&#xff08;1&#xff09;代碼來自 qrandom.h &#xff0c;結合官方的注釋&#xff1a; #ifndef QRANDOM_H #define QRANDOM_H#include <QtCore/qalgorithms.h> #include <algorithm> // for std::generate #include <random> // for std::mt1993…

第二篇:linux之Xshell使用及相關linux操作

第二篇&#xff1a;linux之Xshell使用及相關linux操作 文章目錄 第二篇&#xff1a;linux之Xshell使用及相關linux操作一、Xshell使用1、Xshell安裝2、Xshell使用 二、Bash Shell介紹與使用1、什么是Bash Shell(殼)&#xff1f;2、Bash Shell能干什么&#xff1f;3、平時如何使…

MCP(模型上下文協議)學習筆記

學習MCP&#xff08;模型上下文協議&#xff09;的系統化路徑&#xff0c;結合技術原理、工具實踐和社區資源&#xff0c;幫助你高效掌握這一AI交互標準&#xff1a; 在當今人工智能飛速發展的時代&#xff0c;AI技術正以前所未有的速度改變著我們的生活和工作方式。然而&#…

MIR-2025 | 多模態知識助力機器人導航:從復雜環境到高效路徑規劃

作者&#xff1a;Hui Yuan, Yan Huang, Zetao Du, Naigong Yu, Ziqi Liu, Dongbo Zhang, Kun Zhang 單位&#xff1a;北京工業大學信息科學與技術學院&#xff0c;北京工業大學計算智能與智能系統北京市重點實驗室&#xff0c;中科院自動化研究所模式識別國家重點實驗室與多智…

javaSE.泛型界限

現在有一個新的需求&#xff0c;沒有String類型成績了&#xff0c;但是成績依然可能是整數&#xff0c;也可能是小數&#xff0c;這是我們不希望用戶將泛型指定為除數字類型外的其他類型&#xff0c;我們就需要使用到泛型的上界定義&#xff1a; 上界&#x1f447;只能使用其本…

壓縮包網頁預覽(zip-html-preview)

zip-html-preview 項目介紹 這是一個基于 Spring Boot 開發的在線 ZIP 文件預覽工具,主要用于預覽 ZIP 壓縮包中的 HTML 文件及其相關資源。 主要功能 支持拖拽上傳或點擊選擇多個 ZIP 文件自動解壓并提取 ZIP 文件中的 HTML 文件在線預覽 HTML 文件及其相關的 CSS、JavaSc…

QML之Overlay

Overlay&#xff08;覆蓋層&#xff09;是QML中用于在當前界面之上顯示臨時內容的重要組件。 一、Overlay基礎概念 1.1 什么是Overlay&#xff1f; Overlay是一種浮動在現有界面之上的視覺元素&#xff0c;具有以下特點&#xff1a; 臨時顯示&#xff0c;不影響底層布局 通…

iso17025證書申請方法?iso17025認證意義

ISO/IEC 17025證書申請方法 ISO/IEC 17025是檢測和校準實驗室能力的國際標準&#xff0c;申請CNAS認可的流程如下&#xff1a; 1. 前期準備 標準學習&#xff1a;深入理解ISO/IEC 17025:2017標準要求。 差距分析&#xff1a;評估現有實驗室管理與技術能力與標準的差距。 制…

reverse3 1(Base加密)

題目 做法 下載安裝包&#xff0c;解壓&#xff0c;把解壓后的文件拖進Exeinfo PE進行分析 32位&#xff0c;無殼 扔進IDA&#xff08;32位&#xff09;&#xff0c;找到main&#xff0c;F5反編譯 只是因為在人群中多看了你一眼——第31行的right flag&#xff0c;關鍵詞找到…

電控---CMSIS概覽

1. CMSIS庫簡介 CMSIS&#xff08;Cortex Microcontroller Software Interface Standard&#xff0c;Cortex微控制器軟件接口標準&#xff09;是由ARM公司開發的一套標準化軟件接口&#xff0c;旨在為基于ARM Cortex-M系列處理器&#xff08;如Cortex-M0/M0/M3/M4/M7/M33等&am…

list.

列表類型是用來存儲多個有序的字符串&#xff0c;列表中的每個字符串稱為元素&#xff08;element&#xff09;&#xff0c;?個列表最多可以存儲個元素 在 Redis 中&#xff0c;可以對列表兩端插入&#xff08;push&#xff09;和彈出&#xff08;pop&#xff09;&#xff0c;…

關于Diamond機械手的運動學與動力學的推導

1.關于Diamond機械手 &#xff08;1&#xff09;位置模型推導 逆解&#xff1a;機械末端平臺的位置與驅動關節之間的關系。 設p點在xy平面的坐標是&#xff08;x&#xff0c;y&#xff09;T&#xff0c;此時根據向量求解 OP等于向量r等于e向xy軸的向量主動臂長度向xy軸的向量…

如何新建一個空分支(不繼承 master 或任何提交)

一、需求分析&#xff1a; 在 Git 中&#xff0c;我們通常通過 git branch 來新建分支&#xff0c;這些分支默認都會繼承當前所在分支的提交記錄。但有時候我們希望新建一個“完全干凈”的分支 —— 沒有任何提交&#xff0c;不繼承 master 或任何已有內容&#xff0c;這該怎么…

Flask(補充內容)配置SSL 證書 實現 HTTPS 服務

沒有加密的http服務&#xff0c;就像在裸泳&#xff0c;鉆到水里便將你看個精光。數據在互聯網上傳輸時&#xff0c;如果未經加密&#xff0c;隨時可能被抓包軟件抓住&#xff0c;里面的cookie、用戶名、密碼什么的&#xff0c;它會看得一清二楚&#xff0c;所以&#xff0c;只…

云服務器CVM標準型S5實例性能測評——2025騰訊云

騰訊云服務器CVM標準型S5實例具有穩定的計算性能&#xff0c;CPU采用采用 Intel Xeon Cascade Lake 或者 Intel Xeon Cooper Lake 處理器&#xff0c;主頻2.5GHz&#xff0c;睿頻3.1GHz&#xff0c;CPU內存配置2核2G、2核4G、4核8G、8核16G等配置&#xff0c;公網帶寬可選1M、3…

什么是智算中心

智算中心是一種專門為智能計算提供強大算力支持的基礎設施&#xff0c;以下是關于它的詳細介紹&#xff1a; 定義與功能 智算中心是基于強大的計算能力&#xff0c;特別是針對人工智能算法進行優化的計算中心。它集成了大量的高性能計算設備&#xff0c;如 GPU 集群、FPGA 陣…

注意力機制是如何實現的

注意力機制的實現可以分解為幾個核心步驟&#xff0c;其本質是通過動態計算權重&#xff0c;決定不同位置信息的重要性&#xff0c;再對信息進行加權融合。以下從數學原理、代碼實現到直觀解釋逐步展開&#xff1a; 一、核心實現步驟 以最常見的**點積注意力&#xff08;Dot-P…

【裁員感想】

裁員感想 今天忽然感覺很emo 因為知道公司要裁員 年中百分之10 年末百分十10 我知道這個百分20會打到自己 所以還挺不開心的 我就想起 我的一個親戚當了大學老師 我覺得真的挺好的 又有寒暑假 又不是很累 薪資也不低 又是編制 同時也覺得自己很失敗 因為對自己互聯網的工作又…