全部由1组成的子矩形的数量

题目描述:

给定一个二维数组matrix,其中的值不是0就是1,返回全部由1组成的子矩阵的数量。

way:

假设我们遍历矩形的每一行,以当前遍历到的行作为地基,去看这一行的直方图(直方图介绍 ->直方图的最大长方形面积-CSDN博客)中全部由1组成的子矩阵的个数,将每一行得到的子矩阵数加起来,得到答案,将二维问题转变为了一维问题,所以就是像下面这样。

第一行:1 1 1 1  0 1

第二行:2 2 2 2  0 2 

第三行:3 3 3 3  1 3

第四行:   0 4 4 4  2 4 (做地基时如果有0直接为0,地基都没有,上面的没法垒起来的)

第五行:1 5 0 5  3 5

为了明显点,假设这5行中的有一行是 3, 2, 4, 2, 5,那么计算这一行的直方图的子矩阵的数量就是,以当前行的每个元素作为所在子矩阵中的最小高度,得到一块区域,假设以第4个2作为最低高度,那么可以得到如下的一块区域,在这个区域中,对于高度为2的子矩阵的数量,有1-1列,1-2列,1-3列,1-4列,1-5列,2-2列,2-3,2-4,2-5,3-3,3-4,3-5,4-4,4-5,5-5 这(1+5)*5/2=15个,对于高度为1的数量,也有15个,所以如果区域长度为L,高度为h,那么子矩阵的数量就是  L * (L+1)/2 * h 个,对于上面说的,有 5 *(5+1)/2 *2 = 30个,这个高度h为当前选的最低高度 - max(left, right) (left,right 分别为它的左右两边离它最近且比它 小于or等于 的数,就像第一个2,左边比它小的数没有,右边比它 等于 的数是第2个2,然后h=2-2=0, 没有计算以第一个2为最小高度时的子矩阵数,到了第2个2的时候,左边比它小的数没有,右边比它小的数也没有,h=2-0=2, 到了第2个2的时候才计算了下面的阴影部分的子矩阵的数量,这样就不会算重复,只会在最后一个2的时候去计算以2为最低高度的时候那块高度为2连通的大区域的子矩阵数,必须是 小于等于,必须是 h = 高度差,这样就不会在 最低高度 =3 的时候去计算高度为2的子矩阵数,那样高度为2的区域其实还没有完全连起来形成一块大区域,会算重)。注意要一行一行的做地基 (地基必被算)得到一个个直方图数组去算去加和,其实你按我上面的说法1-1,1-2,1-3....,不同高度这样一行一行的去算就知道对不对了。

#include<iostream>
#include<vector>
#include<stack>
using namespace std;int subMatrixCount(vector<int> height)
{int N = height.size();stack<int>st;int num = 0;for (int i = 0; i < N; i++){while (!st.empty() && height[i] <= height[st.top()]){int topIndex = st.top();st.pop();int leftIndex = st.empty() ? -1 : st.top();int rightIndex = i;//(rightIndex-1)-(leftIndex+1) + 1int L = rightIndex - 1 - leftIndex;int h = height[topIndex] - max(height[rightIndex], leftIndex >= 0 ? height[leftIndex] : 0);num += L * (L + 1) / 2 * h;}st.push(i);}while (!st.empty()){int topIndex = st.top();st.pop();int leftIndex = st.empty() ? -1 : st.top();int rightIndex = N;//(rightIndex-1)-(leftIndex+1) + 1int L = rightIndex - 1 - leftIndex;int h = height[topIndex] - max(0, leftIndex >= 0 ? height[leftIndex] : 0);num += L * (L + 1) / 2 * h;}return num;
}int allSubMatrixCountBy1(vector<vector<char>> mp)
{if (mp.size() == 0) return 0;int M = mp.size();int N = mp[0].size();vector<int>row(N);int sum = 0;for (int i = 0; i < M; i++){for (int j = 0; j < N; j++){if (mp[i][j] == '1'){row[j] += 1;}else{row[j] = 0;}}sum += subMatrixCount(row);}return sum;
}int main()
{vector<vector<char>> mp = {{'1', '1'},{'1', '1'}};int sum = allSubMatrixCountBy1(mp);cout << sum << endl;  //9return 0;
}

 

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

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

相关文章

10.3.3 QGIS点类型注释(Annotation)的应用与二次开发实现

文章目录 前言注释(Annotation)图层QGis中的注释(Annotation)图层二次开发实现线段类型注释(Annotation)点类型Item 总结 前言 介绍注释(Annotation)图层在QGis中的使用以及二次开发的实现说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 注释(Annotation)…

【Unity实战100例】Unity声音可视化多种显示效果

目录 一、技术背景 二、界面搭建 三、 实现 UIAudioVisualizer 基类 四、实现 AudioSampler 类 五、实现 IAudioSample 接口 六、实现MusicAudioVisualizer 七、实现 MicrophoneAudioManager 类 八、实现 MicrophoneAudioVisualizer 类 九、源码下载 Unity声音可视化四…

代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网:55.右旋转字符串

代码随想录算法训练营 Day 9 代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网&#xff1a;55.右旋转字符串 目录 代码随想录算法训练营前言LeetCode151.翻转字符串里的单词卡码网&#xff1a;55.右旋转字符串 一、LeetCode151.翻转字符串里的单词1.题目链…

laravel为Model设置全局作用域

如果一个项目中存在这么一个sql条件在任何情况下或大多数情况都会被使用&#xff0c;同时很容易被开发者遗忘&#xff0c;那么就非常适用于今天要提到的这个功能&#xff0c;Eloquent\Model的全局作用域。 首先看一个示例&#xff0c;有个数据表&#xff0c;结构如下&#xff1…

一款国外开发的高质量WordPress下载站模板主题

5play下载站是由国外站长开发的一款WordPress主题&#xff0c;主题简约大方&#xff0c;为v1.8版本&#xff0c; 该主题模板中包含了上千个应用&#xff0c;登录后台以后只需要简单的三个步骤就可以轻松发布apk文章&#xff0c; 我们只需要在WordPress后台中导入该主题就可以…

大模型应用如何点燃?

▎****尽管在中国&#xff0c;关于大模型的商业模式的讨论尚显早期&#xff0c;但智能体&#xff0c;尤其是专业智能体&#xff0c;蕴藏着巨大的潜力。 ChatGPT 还没有颠覆世界。 身处“第三次信息革命”&#xff0c;很多人被浓烈的FOMO&#xff08;Fear of Missing Out&…

昇思25天学习打卡营第12天 | ResNet50图像分类

ResNet50在CIFAR-10数据集上的图像分类实践 在深入学习和实践使用ResNet50进行CIFAR-10数据集上的图像分类后&#xff0c;我对深度学习模型的构建、训练和优化有了更深刻的理解。本次学习经历涵盖了从理论探索到实际应用的全过程&#xff0c;以下是我的主要收获和反思。 1. 理…

(南京观海微电子)——电感的电路原理及应用区别

电感 电感是导线内通过交流电流时&#xff0c;在导线的内部及其周围产生交变磁通&#xff0c;导线的磁通量与生产此磁通的电流之比。 当电感中通过直流电流时&#xff0c;其周围只呈现固定的磁力线&#xff0c;不随时间而变化&#xff1b;可是当在线圈中通过交流电流时&am…

Jump Point Search(JPS)算法与A*算法

A* A*算法本质上讲是结合了DFS和BFS&#xff0c;针对当前起点先做一次BFS&#xff0c;再针对搜索的八个点做一次DFS BFS--广度优先算法&#xff08;Breadth First Search&#xff09; DFS A* 算法思想 A*的核心思想就是先进行一次BFS搜索&#xff0c;然后从这次BFS中找到距离…

python Requests库7种主要方法及13个控制参数(实例实验)

文章目录 一、Requests库的7种主要方法二、kwargs:控制访问的13个参数 一、Requests库的7种主要方法 序号方法说明1requests.request()&#xff1a;提交一个request请求&#xff0c;作为其他请求的基础2requests.get()&#xff1a;获取HTML网页代码的方法3requests.head()&…

基于重要抽样的主动学习不平衡分类方法ALIS

这篇论文讨论了数据分布不平衡对分类器性能造成的影响,并提出了一种新的有效解决方案 - 主动学习框架ALIS。 1、数据分布不平衡会影响分类器的学习性能。现有的方法主要集中在过采样少数类或欠采样多数类,但往往只采用单一的采样技术,无法有效解决严重的类别不平衡问题。 2、论…

9种二极管及其特点总结

二极管种类和特点 名字特点恒流二极管近些年出现&#xff0c;电压大于某个值&#xff0c;电流恒定&#xff0c;一般用于led普通二极管低频整流和续流&#xff0c;便宜&#xff0c;反向恢复时间us级别&#xff0c;PN结肖特基二极管比普通二极管反向关断更快&#xff0c;10ns级别…

智能硬件——0-1开发流程

文章目录 流程图1. 市场分析具体分析 2. 团队组建2. 团队组建早期团队配置建议配置一&#xff1a;基础型团队 (4人)配置二&#xff1a;扩展型团队 (6人)配置三&#xff1a;全面型团队 (7人) 3. 产品需求分析4. ID设计&#xff08;Industrial Design, 工业设计&#xff09;5. 结…

阿里云公共DNS免费版自9月30日开始限速 企业或商业场景需使用付费版

本周阿里云发布公告对公共 DNS 免费版使用政策进行调整&#xff0c;免费版将从 2024 年 9 月 30 日开始按照请求源 IP 进行并发数限制&#xff0c;单个 IP 的请求数超过 20QPS、UDP/TCP 流量超过 2000bps 将触发限速策略。 阿里云称免费版的并发数限制并非采用固定的阈值&…

Unity游戏开发入门:从安装到创建你的第一个3D场景

目录 引言 一、Unity的安装 1. 访问Unity官网 2. 下载Unity Hub 3. 安装Unity Hub并安装Unity编辑器 二、创建你的第一个项目 1. 启动Unity Hub并创建新项目 2. 熟悉Unity编辑器界面 3. 添加基本对象 4. 调整对象属性 5. 添加光源 三、运行与预览 引言 Unity&…

netty 自定义客户端连接池和channelpool

目录标题 客户端池化运行分析问题修复 客户端池化 通信完成之后&#xff0c;一般要关闭channel&#xff0c;释放内存。但是与一个服务器频繁的打开关闭浪费资源。 通过连接池&#xff0c;客户端和服务端之间可以创建多个 TCP 连接&#xff0c;提升消息的收发能力&#xff0c;同…

【深度学习】VGG-16原理及代码实现

1.原理及介绍 2.代码实现 2.1model.py import torch from torch import nn from torchsummary import summary import torch.nn.functional as Fclass VGG16(nn.Module):def __init__(self):super(VGG16, self).__init__()self.block1 nn.Sequential( # 用一个序列&#xf…

51单片机嵌入式开发:13、STC89C52RC 之 RS232与电脑通讯

STC89C52RC 之 RS232与电脑通讯 第十三节课&#xff0c;RS232与电脑通讯1 概述2 Uart介绍2.1 概述2.2 STC89C52UART介绍2.3 STC89C52 UART寄存器介绍2.4 STC89C52 UART操作 3 C51 UART总结 第十三节课&#xff0c;RS232与电脑通讯 1 概述 RS232&#xff08;Recommended Stand…

Github报错:Kex_exchange_identification: Connection closed by remote host

文章目录 1. 背景介绍2. 排查和解决方案 1. 背景介绍 Github提交或者拉取代码时&#xff0c;报错如下&#xff1a; Kex_exchange_identification: Connection closed by remote host fatal: Could not read from remote repository.Please make sure you have the correct ac…

HTML5大作业三农有机,农产品,农庄,农旅网站源码

文章目录 1.设计来源1.1 轮播图页面头部效果1.2 栏目列表页面效果1.3 页面底部导航效果 2.效果和源码2.1 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_4…