Leetcode 3359. 查找最大元素不超过 K 的有序子矩阵【Plus题】

news2025/4/19 15:35:37

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 = grid
        m, 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] + 1
                    else:
                        rows[i][j] = 1
        # 第二步,遍历每一列,列号记为j,再遍历每列中的每行,行号即为i
        result = 0
        for 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 = 0
            stack = []
            # 2.2.遍历每一列,更新total和stack,并将total更新到结果变量result中。total更新:如果rows[i][j]大于或等于单调栈栈顶的元素,则直接将rows[i][j]增加到total中,并入栈即可;如果小于,则将大的元素从栈中弹出,并从total中切除多余的子矩阵数(相当于切成一个非严格递增的rows[i][j]序列)
            for i in range(m):
                height = 1
                while stack and stack[-1][0] >= rows[i][j]:
                    preRow, preHeight = stack.pop()
                    height += preHeight
                    total -= (preRow - rows[i][j]) * preHeight
                total += rows[i][j]
                stack.append([rows[i][j], height])
                result += total
        return result

4.执行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2337185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件系统 软硬连接

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、理解文件系统 &#x1f320;磁盘结构 二、软硬连接 &#x1f31f;软硬链接 &#x1f320;软链接&#xff1a; &#x1f320;硬链接&#xff1a; &#x1f31f;理解软硬链接的应…

计算机视觉——JPEG AI 标准发布了图像压缩新突破与数字图像取证的挑战及应对策略

概述 今年2月&#xff0c;经过多年旨在利用机器学习技术开发一种更小、更易于传输和存储且不损失感知质量的图像编解码器的研究后&#xff0c;JPEG AI国际标准正式发布。 来自JPEG AI官方发布流&#xff0c;峰值信噪比&#xff08;PSNR&#xff09;与JPEG AI的机器学习增强方法…

Oracle 19c部署之数据库软件安装(二)

在完成了Oracle Linux 9的初始化配置之后&#xff0c;我们准备安装Oracle 19c数据库软件。 Oracle数据库支持两种主要的安装方式&#xff1a;图形化安装和静默安装。这两种方法各有优缺点&#xff0c;选择哪种取决于你的具体需求、环境配置以及个人偏好。 图形化安装 图形化安…

在Vmware15(虚拟机免费) 中安装纯净win10详细过程

一、软件备选 1. VMware15.5.1 网盘下载地址 链接: https://pan.baidu.com/s/1y6GLJ2MG-1tomWblt3otsg?pwdim8e 提取码: im8e 2. windows镜像下载 去官网下载ios包 链接&#xff1a;https://www.microsoft.com/zh-cn/software-download/windows10 二、在VMware15.5.1下安装w…

[Spark]深入解密Spark SQL源码:Catalyst框架如何优雅地解析你的SQL

本文内容组织形式 总结具体例子执行语句解析层优化层物理计划层执行层 猜你喜欢PS 总结 先写个总结&#xff0c;接下来会分别产出各个部分的源码解析&#xff0c;Spark SQL主要分为以下五个执行部分。 具体例子 接下来举个具体的例子来说明 执行语句 SELECT name, age FR…

基于Flask的漏洞挖掘知识库系统设计与实现

基于Flask的漏洞挖掘知识库系统设计与实现 一、系统架构设计 1.1 整体架构 本系统采用经典的三层Web架构&#xff0c;通过Mermaid图展示的组件交互流程清晰呈现了以下核心模块&#xff1a; 前端展示层&#xff1a;基于Bootstrap5构建响应式界面业务逻辑层&#xff1a;Flask…

ECharts散点图-散点图8,附视频讲解与代码下载

引言&#xff1a; ECharts散点图是一种常见的数据可视化图表类型&#xff0c;它通过在二维坐标系或其它坐标系中绘制散乱的点来展示数据之间的关系。本文将详细介绍如何使用ECharts库实现一个散点图&#xff0c;包括图表效果预览、视频讲解及代码下载&#xff0c;让你轻松掌握…

Langchain-构建向量数据库和检索器

向量数据库安装 pip install langchain-chroma 文档》向量存储》向量数据库。 和0416 提示词工程相同。 初始化 import osfrom langchain_chroma import Chroma from langchain_community.chat_message_histories import ChatMessageHistory from langchain_core.documents im…

首席人工智能官(Chief Artificial Intelligence Officer,CAIO)的详细解析

以下是**首席人工智能官&#xff08;Chief Artificial Intelligence Officer&#xff0c;CAIO&#xff09;**的详细解析&#xff1a; 1. 职责与核心职能 制定AI战略 制定公司AI技术的长期战略&#xff0c;明确AI在业务中的应用场景和优先级&#xff0c;推动AI与核心业务的深度…

2025华中杯数学建模B题完整分析论文(共42页)(含模型、数据、可运行代码)

2025华中杯大学生数学建模B题完整分析论文 目录 一、问题重述 二、问题分析 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1解析 4.1.2问题1模型建立 4.1.3问题1样例代码&#xff08;仅供参考&#xff09; 4.1.4问题1求解结果&#xff08;仅供参考&am…

游戏引擎学习第231天

设定当天的主题 我们现在到了一个很少出现在直播中的阶段&#xff0c;但今天是那种需要解释计算机科学基础概念的日子。因此&#xff0c;今天我们将讨论这个内容&#xff0c;今天的重点是“大O表示法”&#xff08;Order Notation&#xff09;&#xff0c;我将用黑板来解释这些…

Linux网络编程实战:从字节序到UDP协议栈的深度解析与开发指南

网路通信的三大要素&#xff1a;协议&#xff0c;端口和IP 知识点1【字节序】 多字节在主机中的存放数据 把多字节看成一个整体存储的顺序。 为什么我们在文件中没有这个概念呢&#xff1f; 因为文件是字节流&#xff08;流指针&#xff09;&#xff0c;流是以一个字节为操…

赋能能源 | 智慧数据,构建更高效智能的储能管理系统

行业背景 随着新能源产业的快速发展&#xff0c;大规模储能系统在电力调峰、调频及可再生能源消纳等领域的重要性日益凸显。 储能电站作为核心基础设施&#xff0c;其能量管理系统&#xff08;EMS&#xff09;需要处理海量实时数据&#xff0c;包括电池状态、功率变化、环境监…

【音视频】音视频FLV合成实战

FFmpeg合成流程 示例本程序会⽣成⼀个合成的⾳频和视频流&#xff0c;并将它们编码和封装输出到输出⽂件&#xff0c;输出格式是根据⽂件扩展名⾃动猜测的。 示例的流程图如下所示。 ffmpeg 的 Mux 主要分为 三步操作&#xff1a; avformat_write_header &#xff1a; 写⽂件…

猪行为视频数据集

猪行为数据集包含 23 天(超过 6 周)的日间猪行为视频,这些视频由近乎架空的摄像机拍摄。视频已配准颜色和深度信息。数据以每秒 6 帧的速度捕获,并以 1800 帧(5 分钟)为一批次进行存储。大多数帧显示 8 头猪。 这里可以看到颜色和深度图像的示例: 喂食器位于图片底部中…

【网络技术_域名解析DNS】一、DNS 基础剖析及其原理

一、DNS 在互联网架构中的基石地位​ 当我们在浏览器地址栏输入www.baidu.com按下回车键的瞬间&#xff0c;一场跨越全球的 “数字寻址游戏” 便悄然启动。DNS&#xff08;Domain Name System&#xff09;作为互联网的核心基础设施&#xff0c;承担着将人类易读的域名转换为机…

Java学习小册:Java并发容器与原子类

在Java并发编程中&#xff0c;并发容器和原子类是管理共享数据的重要工具。它们提供了线程安全的数据结构和原子操作&#xff0c;确保在多线程环境下数据的一致性和操作的正确性。本文将深入探讨Java中的并发容器和原子类&#xff0c;包括它们的基本概念、使用方法、关键类及其…

摄影跟拍预定|基于java+vue的摄影跟拍预定管理系统(源码+数据库+文档)

摄影跟拍预定管理系统 目录 基于SprinBootvue的摄影跟拍预定管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3摄影师功能模块 4用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获…

【HFP】深入解析蓝牙 HFP 协议中呼叫转移、呼叫建立及保持呼叫状态的机制

目录 一、核心指令概述 1.1 ATCMER&#xff1a;呼叫状态更新的 “总开关” 1.2 ATBIA&#xff1a;指示器的 “精准控制器” 1.3 指令对比 1.4 指令关系图示 二、CIEV 结果码&#xff1a;状态传递的 “信使” 2.1 工作机制 2.2 三类核心指示器 三、状态转移流程详解 3…

Linux:显示 -bash-4.2$ 问题(CentOS 7)

文章目录 一、原因二、错误示例三、解决办法 一、原因 在 CentOS 7 系统中&#xff0c;如果你看到命令行提示符显示为 -bash-4.2$&#xff0c;一般是 Bash shell 正在运行&#xff0c;并且它没有找到用户的个人配置文件&#xff0c;或者这些文件有问题而未能成功加载。这个提示…