1504. 统计全 1 子矩形

Problem: 1504. 统计全 1 子矩形

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这个问题可以通过压缩数组和单调栈的方法来解决。我们首先遍历矩阵,对于每一行,我们计算出每一列的高度(连续的1的数量)。然后,我们使用单调栈来计算以每个单元格为右下角的全1子矩形的数量。

解题方法

我们首先初始化一个高度数组,用于存储每一列的高度。然后,我们遍历矩阵,对于每一行,我们更新高度数组,并使用单调栈来计算以每个单元格为右下角的全1子矩形的数量。
单调栈的作用是帮助我们找到每个单元格左边和右边第一个高度小于它的单元格。这样,我们就可以计算出以每个单元格为右下角的全1子矩形的数量。

复杂度

时间复杂度:

O ( n m ) O(nm) O(nm),其中n和m分别是矩阵的行数和列数。我们需要遍历每个单元格,并在单调栈中进行操作。

空间复杂度:

O ( m ) O(m) O(m),我们需要使用一个高度数组和一个单调栈,它们的大小都与矩阵的列数m相等。

Code

class Solution {public static int MXAN = 151;public static int[] height = new int[MXAN];public static int[] stack = new int[MXAN];public static int r;public int numSubmat(int[][] mat) {int n = mat.length;int m = mat[0].length;int ans = 0;Arrays.fill(height, 0, m, 0);for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {height[j] = mat[i][j] == 0 ? 0 : height[j] + 1;}ans += countFromBottom(m);}return ans;}private static int countFromBottom(int m) {r = 0;int ans = 0;for (int i = 0, left, len, bottom; i < m; i++) {while (r > 0 && height[stack[r - 1]] >= height[i]) {int cur = stack[--r];if(height[cur] > height[i]) {left = r == 0 ? -1 : stack[r - 1];len = i - left - 1;bottom = Math.max(left == -1 ? 0 : height[left], height[i]);ans += (height[cur] - bottom) * (len * (len + 1) / 2);}}stack[r++] = i;}while(r > 0) {int cur = stack[--r];int left = r == 0 ? -1 : stack[r - 1];int len = m - left - 1;int down = left == -1 ? 0 : height[left];ans += (height[cur] - down) * (len * (len + 1) / 2); }return ans;}
}

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

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

相关文章

mysql锁-这条sql加了哪些锁

文章目录 1、 InnoDB的三种行锁2、常见的加锁语句2.1、常见隐式加锁语句2.1、常见显示加锁语句 3、加锁的2条规则4、案例4.1、唯一索引等值查询4.2、唯一索引范围查询4.3、非唯一索引等值查询4.4、非唯一索引范围查询 InnoDB 存储引擎中的行锁的加锁规则。 1、 InnoDB的三种行锁…

04|事务性能优化

4.1大事务的影响 ● 并发情况下&#xff0c;数据库连接池容易被撑爆 ● 锁定太多的数据&#xff0c;造成大量的阻塞和锁超时 ● 执行时间长&#xff0c;容易造成主从延迟 ● 回滚所需要的时间比较长 ● undo log膨胀 ● 容易导致死锁 4.2事务优化 ● 将查询等数据准备操作放…

二. 系统性能评价(2分)

🌟二. 系统性能评价(2分) 性能调整中的性能优化 和 性能评估方法 考试重点 文章目录 🌟二. 系统性能评价(2分)==性能调整中的性能优化 和 性能评估方法 考试重点==@[toc]2.1 性能评价指标 [包含计算]2.2 系统性能调整 [设计计算]2.3 性能优化2.4 性能评估方法2.1 性能评价…

嵌入式驱动学习第一周——vim的使用

前言 本篇博客学习使用vim&#xff0c;vim作为linux下的编辑器&#xff0c;学linux肯定是绕不开vim的&#xff0c;因为不确定对方环境中是否安装了编译器&#xff0c;但一定会有vim。 对于基本的使用只需要会打开文件&#xff0c;保存文件&#xff0c;编辑文件即可。 嵌入式驱动…

iconfont的组件化使用方法(SVG)

目录 一、需求描述二、操作步骤1.在iconfont中选择项目需要使用的图标2.在项目中创建iconfont.js3.创建svgIcon组件 一、需求描述 将iconfont图标库选择的图标以SVG的形式引入项目并通过组件化的形式在项目中引用可控制图标的大小和颜色 二、操作步骤 1.在iconfont中选择项目…

yaml文件详解

Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#xff1a;主要用于 api 接口之间消息的传递 YAML 格式&#xff1a;用于配置和管理&#xff0c;YAML 是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 YAML 语法格式&#xff1a; ●大小写敏…

Mysql常见函数和用法(重点)

where子句中经常使用的运算符 -- 查询总分大于200分的所有同学 select * from student2 where (chineseenglishmath)>200; -- 查询math大于60 并且(and)id大于4的学生成绩 select * from student2 where math>60 and id>4; -- 查询英语成绩大于语文成绩的同学 select …

跟着cherno手搓游戏引擎【26】Profile和Profile网页可视化

封装Profile&#xff1a; Sandbox2D.h:ProfileResult结构体和ProfileResult容器&#xff0c;存储相应的信息 #pragma once #include "YOTO.h" class Sandbox2D :public YOTO::Layer {public:Sandbox2D();virtual ~Sandbox2D() default;virtual void OnAttach()ove…

【Python 数据分析 实战案例】通过用户和订单的数据分析,制定营销策略

在互联网行业中&#xff0c;电子商务领域绝对是数据分析用途最多的地方&#xff0c;各大电商平台都依赖数据分析帮助其挖掘用户订单增长机会。比如某宝的随手买一件&#xff0c;核心思路也就是根据用户的日常浏览内容及停留时间&#xff0c;以及订单的关联度来进行推荐的。 本…

AI与大数据:智慧城市安全的护航者与变革引擎

一、引言 在数字化浪潮的席卷下&#xff0c;智慧城市正成为现代城市发展的新方向。作为城市的神经系统&#xff0c;AI与大数据的融合与应用为城市的安全与应急响应带来了革命性的变革。它们如同城市的“智慧之眼”和“聪明之脑”&#xff0c;不仅为城市管理者提供了强大的决策…

VScode连接远端服务器一直输入密码解决方法

文章目录 1 关闭远程连接2打开命令面板3 输入remote-ssh: kill vs code server on host… 1 关闭远程连接 2打开命令面板 3 输入remote-ssh: kill vs code server on host… remote-ssh: kill vs code server on host… 然后一路回车(选中出问题的主机)&#xff0c;输一遍密码…

chap gpt的底层逻辑是什么?chap gpt如何进行训练?chap gpt会产生自我迭代和自我意识吗?

ChatGPT的底层逻辑是基于生成式预训练模型&#xff08;Generative Pre-Training&#xff09;。它使用了大量的无监督学习来预训练模型&#xff0c;然后通过有监督学习进行微调&#xff0c;以提高对语言的理解能力。 ChatGPT的训练过程可以分为两个阶段&#xff1a;预训练和微调…

tmux的使用方法

1. tmux的定义 我&#xff1a;什么是tmux&#xff1f; GPT&#xff1a;tmux&#xff08;terminal multiplexer&#xff09;是一个强大的终端复用器&#xff0c;它允许用户在一个终端窗口中创建、访问和控制多个会话。使用tmux&#xff0c;你可以在一个窗口中打开多个终端会话&…

SpringMVC(1)

目录 SpringMVC简介入门案例启动服务器初始化过程单次请求过程bean加载控制 PostMan请求与响应设置请求映射路径请求参数五种类型参数传递JSON数据日期类型参数传递响应 RestRest 简介RESTful快速开发 SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&a…

快速搭建宠物医院服务小程序的步骤,无需编程经验

如果你是一家宠物医院或者宠物服务机构&#xff0c;想要拥有一款方便用户预约、查询信息的小程序&#xff0c;那么乔拓云网提供的轻应用小程序是你的不二选择。下面将为你详细介绍如何轻松打造宠物医院服务小程序。 1. 进入乔拓云网后台&#xff0c;点击【轻应用小程序】中的【…

FDTD算法总结

计算电磁学(Computational Electromagnetics, CEM)是通过数值计算来研究电磁场的交叉学科。 数值求解电磁学问题的方法可以分成频域(Frequency Doamin, FD)、时域(Time Domain, TD)等两类。 频域法基于时谐微分&#xff0c;通过对多个采样值的傅里叶逆变换得到所需的脉冲响应…

代码随想录|学习工具分享

工具分享 画图 https://excalidraw.com/ 大家平时刷题可以用这个网站画草稿图帮助理解&#xff01;如果看题解很蒙或者思路不清晰的时候&#xff0c;跟着程序处理流程画一个图&#xff0c;90%的情况下都可以解决问题&#xff01; 数据结构可视化 https://www.cs.usfca.edu/…

Springboot应用执行器Actuator源码分析

文章目录 一、认识Actuator1、回顾Actuator2、Actuator重要端点 二、源码分析1、Endpoint自动装配&#xff08;1&#xff09;自动配置入口&#xff08;2&#xff09;普通Endpoint自动装配&#xff08;3&#xff09;配置Web - Endpoint&#xff08;4&#xff09;注册Endpoint为M…

vue_pdf,word,excel,pptx等文件预览

项目背景&#xff1a;vue3elementPlusvite 1.pdf 1.1 iframe预览 #toolbar0 拼接到src后&#xff0c;可隐藏iframe顶部的工具栏 <template><div class"viewPDF.vue"><uploadFile file"getFile" accept".pdf,.PDF" ></up…

redis八股

文章目录 数据类型字符串实现使用场景 List 列表实现使用场景 Hash 哈希实现使用场景 Set 集合实现使用场景 ZSet 有序集合实现使用场景 BitMap实现使用场景 Stream使用场景pubsub为什么不能作为消息队列 数据结构机制SDS 简单动态字符串压缩列表哈希表整数集合跳表quicklistli…