89 柱状图中最大的矩形

柱状图中最大的矩形


给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。
在这里插入图片描述
提示:

  • 1 <= heights.length <= 1 0 5 10^5 105
  • 0 <= heights[i] <= 1 0 4 10^4 104

类似接雨水(反过来,相当于找接雨水最少的一段)

题解1 暴力搜索(超时) O ( N 2 ) O(N^2) O(N2)

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int s = heights.size();int maxs = 0;for(int l = 0; l < s; l++){int minL = INT_MAX;for(int r = l; r < s; r++){minL = min(minL, heights[r]);maxs = max(maxs, minL*(r-l+1));}}return maxs;}
};

另一种

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int s = heights.size();int maxs = 0;for(int i = 0; i < s; i++){int l = i;int r = i;int tmph = heights[i];while(l >= 1 && heights[l-1] >= tmph)--l;while(r + 1 < s && heights[r+1] >= tmph)++r;maxs = max(maxs, (r-l+1)*tmph);}return maxs;}
};

题解2 单调栈【重点学习】

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int s = heights.size();stack<int> stk; // 单调栈,下标对应值保持非严格递增vector<int> l(s, -1), r(s, s);int maxs = 0;// 从左向右// 找到离i最近的 < hegihts[i]的左边界for(int i = 0; i < s; i++){while(stk.size() && heights[stk.top()] >= heights[i])stk.pop();l[i] = (stk.empty() ? -1 : stk.top());stk.push(i);}stk = stack<int>();// 从右向左// 找到离i最近的 < hegihts[i]的右边界for(int i = s-1; i >= 0; i--){while(stk.size() && heights[stk.top()] >= heights[i])stk.pop();r[i] = (stk.empty() ? s : stk.top());stk.push(i);}for(int i = 0; i < s; i++){// 使用单调栈的初衷: 以height[i]为高度的矩形对应的宽 = r[i]-l[i]maxs = max(maxs, heights[i]*(r[i]-l[i]-1));}return maxs;}
};

在这里插入图片描述

常数优化

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int s = heights.size();stack<int> stk; // 单调栈,下标对应值保持非严格递增vector<int> l(s, -1), r(s, s);int maxs = 0;// 从左向右for(int i = 0; i < s; i++){while(stk.size() && heights[stk.top()] >= heights[i]){r[stk.top()] = i;stk.pop();}l[i] = (stk.empty() ? -1 : stk.top());stk.push(i);}for(int i = 0; i < s; i++){maxs = max(maxs, heights[i]*(r[i]-l[i]-1));}return maxs;}
};

在这里插入图片描述

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

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

相关文章

看完这个,别说你还找不到免费好用的配音软件

有很多小伙伴还在找配音工具&#xff0c;今天就给大家一次性分享四款免费好用的配音工具&#xff0c;每一个都经过测试&#xff0c;并且是我们自己也在用的免费配音工具 第一款&#xff0c;悦音配音工具 拥有强悍的AI智能配音技术&#xff0c;更专业&#xff0c;完美贴近真人配…

6. 一文快速学懂常用工具——GDB(下)

本章讲解知识点 GDB 调试 core 文件GDB 调试多线程本专栏适合于软件开发刚入职的学生或人士,有一定的编程基础,帮助大家快速掌握工作中必会的工具和指令。本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习…

算法升级之路(六)

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]] 解题思路&…

企业型多域名SSL证书怎么申请?有哪些流程?

随着越来越多的交流和交易发生在互联网上&#xff0c;保护敏感数据和建立用户信任成为企业的首要任务。HTTPS协议是一种关键的安全措施&#xff0c;用于保护数据传输的机密性和完整性。为了实施HTTPS&#xff0c;企业可以选择安装SSL证书。而对于需要保护多个域名的企业&#x…

Spring IOC - ConfigurationClassPostProcessor源码解析

上文提到Spring在Bean扫描过程中&#xff0c;会手动将5个Processor类注册到beanDefinitionMap中&#xff0c;其中ConfigurationClassPostProcessor就是本文将要讲解的内容&#xff0c;该类会在refresh()方法中通过调用invokeBeanFactoryPosstProcessors(beanFactory)被调用。 5…

php收发邮件的多种方法?

1、添加扩展&#xff1a; # 第一种&#xff1a; composer require php-imap/php-imap # 第二种&#xff1a; composer require phpmailer/phpmailer2、这里采用第二种方式&#xff1a; <?php declare(strict_types1);namespace App\Controller\v1\email;use App\Controll…

蓝牙服务:优化体验,提高连接效率

文章目录 1. 对蓝牙连接进行优化2. 设备配对的缓存机制3. 优化蓝牙连接的稳定性 蓝牙技术已经成为我们生活中不可或缺的一部分&#xff0c;我们使用它进行音频传输、数据传输、设备连接等等。然而&#xff0c;有时蓝牙连接会让用户感到非常困扰&#xff0c;比如连接速度缓慢、连…

【Android知识笔记】换肤专题

换肤其实也属于插件化专题的一个子话题,之所以单独拿出来,是因为它的处理方式比较特殊,相比插件化而言较简单一些。 系统内置的换肤功能支持 - Theme Android 系统中如果想修改应用的背景色,最简单的就是利用以下Theme相关的属性: 使用这些内置的属性可以实现一定程度上…

关于CMMI3.0评估的相关事宜

CMMI研究院发布了关于CMMI3.0评估的相关事宜&#xff0c;具体安排如下&#xff1a; 1、于2023年4月6日正式发布 CMMI 3.0。 2、于2023年第三季度&#xff08;7至9月&#xff09;计划确定具体方式和时间表&#xff0c;以获取CMMI3.0资质&#xff08;具体安排根据委员会确定&am…

计算机视觉的相机选型

#你一般什么时候会用到GPT?# 目前市面上的工业相机大多是基于CCD&#xff08;ChargeCoupled Device&#xff09;或CMOS&#xff08;Complementary Metal Oxide Semiconductor&#xff09;芯片的相机。一般CCD制造工艺更加复杂&#xff0c;也会更贵一点&#xff01; 1、CCD工…

Vue.js 之 透传 Attributes

Vue.js 之 透传 Attributes 1.Attributes 继承​2.对 class 和 style 的合并​3.v-on 监听器继承​4.深层组件继承​5.禁用 Attributes 继承​6.多根节点的 Attributes 继承​7.在 JavaScript 中访问透传 Attributes​ 1.Attributes 继承​ “透传 attribute”指的是传递给一个…

catkin build说明

与catkin_make不同&#xff0c;可以参考catkin build – Build Packages中文翻译版手册catkin build 默认会生成.private文件夹。链接时候可能出现失败的问题。catkin参数配置之软连接模式 改为如下模式即可 catkin init catkin config --merge-devel catkin buildBug Issue1…

django如何连接sqlite数据库?

目录 一、SQLite数据库简介 二、Django连接SQLite数据库 1、配置数据库 2、创建数据库表 三、使用Django ORM操作SQLite数据库 1、定义模型 2、创建对象 3、查询对象 总结 本文将深入探讨如何在Django框架中连接和使用SQLite数据库。我们将介绍SQLite数据库的特点&…

springboot知识点补充

系列文章目录 文章目录 系列文章目录前言一、springboot基础二、使用步骤1.引入库2.读入数据 前言 一、springboot基础 知识点补充 二、使用步骤 1.引入库 代码如下&#xff08;示例&#xff09;&#xff1a; import numpy as np import pandas as pd import matplotlib.pyp…

前端开发规范和注意点

*补救原则&#xff1a;出现异常时第一时间退出&#xff0c;并给出足够的提示错误信息。 *开发流程&#xff1a; *常规发布版本 常规发布版本频率为每月会有两个发布窗口&#xff08;一大一小&#xff1a;上半月小版本、下半月大版本&#xff09;。 例如2019年4月的常规发布版本…

k8spod

pod基本概念 (几种容器) pod 是k8s最小的创建和运行单元 一个pod包含几个容器&#xff0c;1个根容器/父容器/基础容器&#xff0c;一个或者多个应用容器/业务容器&#xff0c;pause容器 pod里面容器共享 network UTS IPC命令空间 k8s 创建的Pod 分为两种&#xff1a; 自主…

Android NDK开发详解之ndk-gdb

Android NDK开发详解之ndk-gdb 要求用法选项 线程支持 NDK 包含一个名为 ndk-gdb 的 Shell 脚本&#xff0c;可以启动命令行原生调试会话。偏好使用 GUI 的用户则应阅读在 Android Studio 中调试这篇文档。 要求 要运行命令行原生调试&#xff0c;必须满足以下要求&#xff1…

C#中LINQtoSQL的设置与连接

目录 一、首次安装LinqToSql类 二、非首次安装LinqToSql类 1.接受原有数据库连接 2.建立新的数据库连接 3.建立本地数据库连接 LINQ&#xff08;Language-Integrated Query&#xff0c;语言集成查询&#xff09;是微软公司提供的一项新技术&#xff0c;它能够将查询功能直…

linux常见问题解析

Linux 是一款商业上最受欢迎的操作系统之一&#xff0c;由于其稳定性和安全性&#xff0c;它已成为服务器运维中的主流。虽然 Linux 具有很多优点&#xff0c;但仍然有一些常见问题和挑战需要解决。 本文将梳理一些常见的 Linux 运维问题&#xff0c;并提供如何解决这些问题的…

2023年【熔化焊接与热切割】考试题及熔化焊接与热切割模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【熔化焊接与热切割】考试题及熔化焊接与热切割模拟考试&#xff0c;包含熔化焊接与热切割考试题答案和解析及熔化焊接与热切割模拟考试练习。安全生产模拟考试一点通结合国家熔化焊接与热切割考试最新大纲及熔…