直方图的最大长方形面积

news2024/11/27 16:32:02

前提知识:单调栈基础题-CSDN博客    子数组的最大值-CSDN博客

题目描述:

给定一个非负数(0和正数),代表直方图,返回直方图的最大长方形面积,比如,arr = {3, 2, 4, 2, 5},那么直方图就是下面这个样子的,最大的长方形面积为图中阴影部分面积,为2*5 = 10。

way:

遍历arr数组,以当前遍历到的数组元素作为它所在的长方形中的最小的高,向它的两边往外扩,那么当遇到左边的最近的比它小的元素和右边离它最近且比它小的元素时,停止扩张,中间的区域都是能以它作为最小的高的长条,计算长方形面积 = 当前最小高 * 区域长度,取max。

#include<iostream>
#include<vector>
#include<stack>
using namespace std;

int largestRectangleArea(vector<int> arr)
{
	int N = arr.size();
	stack<int>st;
	int nMax = INT_MIN;
	for (int i = 0; i < N; i++)
	{
		while (!st.empty() && arr[i] <= arr[st.top()])
		{
			int topIndex = st.top();
			st.pop();
			int leftIndex = st.empty() ? -1 : st.top();
			int rightIndex = i;
			nMax = max(nMax, arr[topIndex] * (rightIndex - 1 - leftIndex));
		}
		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)+1 
		nMax = max(nMax, arr[topIndex] * (rightIndex - 1 - leftIndex));
	}
	return nMax;
}


int main()
{
	vector<int> arr = { 3,2,4,2,5 };
	int nMax = largestRectangleArea(arr);
	cout << nMax << endl;
	return 0;
}

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

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

相关文章

关于Qt部署CMake导致“Failed to set working directory to“的问题

使用qt部署Cmake项目时&#xff0c;遇到"Failed to set working directory to"的错误&#xff08;还没编译&#xff09;&#xff0c;然后查看部署信息发现&#xff1a; “The CXX compiler identification is unknown”、“CMake Error at xxxx/CMakeTestCXXCompiler…

【计算机视觉】siamfc论文复现

什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置)&#xff0c;来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 孪生网络结构其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中&#xff0…

【Python】PyMySQL 和 mysql-connector-python 的比较:差异详解

文章目录 1. PyMySQL2. mysql-connector-python3. 相同之处4. 不同之处性能功能特性兼容性错误处理 5. 性能比较6. 兼容性和依赖性7. 社区支持和文档8. 使用示例9. 总结 MySQL 是全球最流行的开源数据库之一&#xff0c;而 Python 作为一种广泛应用的编程语言&#xff0c;提供了…

【字少图多剖析微服务】深入理解Eureka核心原理

深入理解Eureka核心原理 Eureka整体设计Eureka服务端启动Eureka三级缓存Eureka客户端启动 Eureka整体设计 Eureka是一个经典的注册中心&#xff0c;通过http接收客户端的服务发现和服务注册请求&#xff0c;使用内存注册表保存客户端注册上来的实例信息。 Eureka服务端接收的…

Polaris系列-07.启动分析六

本篇分析 配置中心模块 启动流程&#xff1a; 先看启动配置参数&#xff1a; 进入方法&#xff1a; 先看看配置中心服务数据模型&#xff1a;初始化也是围绕着下面各个属性赋值... // Server 配置中心核心服务 type Server struct {cfg *Configstorage store.Sto…

51单片机13(动态数码管实验)

一、数码管动态显示原理 1、动态显示是利用减少段选线&#xff0c;分开位选线&#xff0c;利用位选线不同时选择通断&#xff0c;改变段选数据来实现的。 &#xff08;1&#xff09;多位数码管依然可以进行静态的一个显示&#xff0c;那么在前面我们介绍静态数码管的时候&…

VTK源码分析:Type System

作为一款开源跨平台的数据可视化代码库&#xff0c;VTK以其清晰的流水线工作方式、丰富的后处理算法、异种渲染/交互方式&#xff0c;而被众多CAx软件选作后处理实施方案。而异种渲染/交互方式的实现&#xff0c;主要是倚重于VTK的类型系统&#xff0c;因此&#xff0c;有必要对…

visio保存一部分图/emf图片打开很模糊/emf插入到word或ppt中很模糊

本文主要解决三个问题 visio保存一部分图 需求描述&#xff1a;在一个visio文件中画了很多个图&#xff0c;但我只想把其中一部分保存成某种图片格式&#xff0c;比如jpg emf png之类的&#xff0c;以便做后续的处理。 方法&#xff1a;超级容易。 选中希望保存的这部分图&…

免费【2024】springboot 爱看漫画小程序的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

分布式搜索之Elasticsearch入门

Elasticsearch 是什么 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心&#xff0c;它集中存储您的数据&#xff0c;帮助您发现意料之中以及意料之外的情况。 Elastic Stack 又是什么呢&a…

使用docker swarm搭建ruoyi集群环境

整体目标 项目背景 领导给到了我一个客户&#xff0c;客户商业模式为成本制作&#xff0c;成本核算。其中涉及到大量涉密数据&#xff0c;且与我们现有产品几乎没有兼容点&#xff08;我们是一套低代码的框架&#xff0c;客户有很多业务二开&#xff09; 测试环境给到了我6台…

黑马微服务拆分2 (路由 登录 配置)

会利用微服务网关做请求路由 会利用微服务网关做登录身份校验 会利用Nacos实现统一配置管理 会利用Nacos实现配置热更新 今天粗略的完成了黑马笔记里边的代码实现 其实本身黑马商城的源码就写的逻辑有漏洞&#xff0c;加上对业务没有仔细分析 导致出现的bug调试了很久 这…

如何判断自己的数据格式适合使用json还是Excel的形式存入neo4j数据库

判断自己的数据格式适合使用JSON还是Excel的形式存入Neo4j数据库&#xff0c;主要取决于数据的复杂性、规模、结构、以及你或你的团队对这两种格式的熟悉程度。以下是一些关键因素&#xff0c;可以帮助你做出决策&#xff1a; 数据的复杂性&#xff1a; 如果你的数据包含大量的…

【Zynq UltraScale+ RFSoC】~~~

Zynq UltraScale RFSoC 系列为 5G 无线和射频级模拟应用引入了颠覆性的集成和架构突破&#xff0c;可直接支持整个 5G sub-6GHz 频段。这个创新系列现已开始批量生产。此设计演示展示了多通道&#xff08;8T8R 或 16T16R&#xff09;Zynq UltraScale RFSoC 评估工具工具工具&am…

ICMP 和 IGMP 的区别

ICMP 和 IGMP 协议 IP 层分支图 ICMP&#xff08;Internet Control Message Protocol&#xff0c;因特网控制信息协议&#xff09; 用于补充 IP 传输数据报的过程中&#xff0c;发送主机无法确定数据报是否到达目标主机。 ICMP 报文分为出错报告报文和查询报文两种。 若数据…

C语言 | Leetcode C语言题解之第263题丑数

题目&#xff1a; 题解&#xff1a; bool isUgly(int n) {if (n < 0) {return false;}int factors[] {2, 3, 5};for (int i 0; i < 3; i) {while (n % factors[i] 0) {n / factors[i];}}return n 1; }

python:本机摄像头目标检测实时推理(使用YOLOv8n模型)

本文将介绍如何使用本机摄像头进行目标检测实时推理的python代码。 文章目录 一、下载YOLO权重文件二、环境配置三、完整代码 一、下载YOLO权重文件 https://github.com/ultralytics/ultralytics?tabreadme-ov-file 拉到网页最下面&#xff0c;选择适合的模型&#xff0c;下…

Armv8/Armv9架构的学习大纲-学习方法-自学路线-付费学习路线

本文给大家列出了Arm架构的学习大纲、学习方法、自学路线、付费学习路线。有兴趣的可以关注&#xff0c;希望对您有帮助。 如果大家有需要的&#xff0c;欢迎关注我的CSDN课程&#xff1a;https://edu.csdn.net/lecturer/6964 ARM 64位架构介绍 ARM 64位架构介绍 ARM架构概况…

56、本地数据库迁移到阿里云

现有需求&#xff0c;本地数据库迁移到阿里云上。 库名xy102表 test01test02test01 test023条数据。1、登录阿里云界面创建免费试用ECS实列。 阿里云登录页 (aliyun.com)](https://account.aliyun.com/login/login.htm?oauth_callbackhttps%3A%2F%2Fusercenter2.aliyun.com%…

Spring -- 三层架构

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 应用分层 介绍 在阿里的开发手册里,关于工程结构部分,定义的常见工程的应用分层结构 那么什么是应用分层呢? 应用分层是一种软件开发设计思想,他将应用程序分层N个层次.这N个层次分别负责各…