leetcode热题100.柱状图中最大的矩形

news2024/9/20 20:50:30

Problem: 84. 柱状图中最大的矩形

文章目录

  • 题目
  • 思路
  • 复杂度
  • Code

题目

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

求在该柱状图中,能够勾勒出来的矩形的最大面积。

示例 1:
在这里插入图片描述

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10

示例 2:
在这里插入图片描述

输入: heights = [2,4]
输出: 4

思路

对于一根柱子x,其高为h.假如我们知道了他左边的第一根小于他的柱子的位置l和邮编第一个小于的高度的柱子r,那么我们很容易求得他的最大面积为: s = ( r − l − 1 ) ∗ h s = (r-l-1) * h s=(rl1)h

根据这一性质,我们采用单调栈的方法,在栈中保留第一个比当前元素小的元素的索引,所有大于当前元素的索引都将被弹出;如果栈不为空,说明存在这样一个索引,其对应的元素值小于当前元素,我们记录他。

我们分别从左往右和从右往左计算两遍,最后得出答案

复杂度

时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( n ) O(n) O(n)

Code

class Solution:
    def largestRectangleArea(self, heights: List[int]) -> int:
        n = len(heights)
        left = [-1] * n
        st = []
        for i,x in enumerate(heights):
            while st and heights[st[-1]] >= x:
                st.pop()
            if st:
                left[i] = st[-1]
            st.append(i)

        right = [n] * n
        st.clear()
        for i in range(n-1,-1,-1):
            x = heights[i]
            while st and heights[st[-1]] >= x:
                st.pop()
            if st:
                right[i] = st[-1]

            st.append(i)
        
        ans = 0
        for h,l,r in zip(heights,left,right):
            ans = max(ans,h*(r-l-1))
        return ans

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

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

相关文章

2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现: 图形(或图像)在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形,位图则使用像素来描述图像。一般来说&#…

【ripro美化】全站美化包WordPress RiPro主题二开美化版sucaihu-childV1.9(功能集成到后台)

使用介绍 1、【宝塔】删除ripro文件,上传最新ripro版本,然后上传压缩包内的ripro里面的对应文件到ripro主题对应内覆盖(找到对应路径单个文件去覆盖)。 2、然后上传ripro-chlid子主题美化包到/wp-content/themes路径下 3、注意顺…

无需麻烦:电脑如何轻松管理和同步iPhone应用

轻松实现电脑对iPhone应用管理 摘要 本文介绍了如何使用克魔助手工具实现电脑对手机应用的管理操作。通过简单的步骤,用户可以批量操作手机应用、运行应用、查看应用日志以及安装测试IPA包,提高工作效率和方便管理手机应用。 引言 在日常工作中&#…

智慧公厕解决方案打造更加智能的卫生空间

一、智慧公厕方案概述 智慧公厕方案旨在解决现有公厕存在的诸多问题,包括民众用厕困难、环境卫生状况不佳、管理效率低下等方面。针对民众的需求和管理方面的挑战,智慧公厕提供了一套综合解决方案,包括智能导航、环境监测、资源管理等功能&a…

Day46:WEB攻防-注入工具SQLMAPTamper编写指纹修改高权限操作目录架构

目录 数据猜解-库表列数据&字典 权限操作-文件&命令&交互式 提交方法-POST&HEAD&JSON 绕过模块-Tamper脚本-使用&开发 分析拓展-代理&调试&指纹&风险&等级 知识点: 1、注入工具-SQLMAP-常规猜解&字典配置 2、注入…

2024.3.28学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p286-p294 继承 继承可以解决代码复用,让我们的编程更加靠近人类思维,当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类中定义这些…

【FedCoin: A Peer-to-Peer Payment System for Federated Learning】

在这篇论文中,我们提出了FedCoin,一个基于区块链的点对点支付系统,专为联邦学习设计,以实现基于Shapley值的实际利润分配。在FedCoin系统中,区块链共识实体负责计算SV,并且新的区块是基于“Shapley证明”&a…

6.2物联网RK3399项目开发实录-驱动开发之GPIO使用(wulianjishu666)

物联网嵌入式开发源码例程: 链接:https://pan.baidu.com/s/1B3oqq5QBhN-VmTFt9CI-7A?pwd2ihg ******************************************************************************************* GPIO 使用 简介 GPIO, 全称 General-Purpose Input/…

如何购买阿里云服务器?2024年阿里云服务器购买流程分享

很多新手用户不知道阿里云服务器购买的流程,不清楚该如何选购云服务器配置才能既满足需求又不会掉“坑”里,为此笔者整理了2024年购买阿里云服务器的完整流程,分为通过云服务器ECS产品页下单购买和通过阿里云活动购买云服务器两种最常见的购买…

使用pytorch构建一个初级的无监督的GAN网络模型

在这个系列中将系统的构建GAN及其相关的一些变种模型,来了解GAN的基本原理。本片为此系列的第一篇,实现起来很简单,所以不要期待有很好的效果出来。 第一篇我们搭建一个无监督的可以生成数字 (0-9) 手写图像的 GAN,使用MINIST数据…

3.28作业

#include <iostream> using namespace std; // 构造函数示例 class MyClass { private: int data; public: // 默认构造函数 MyClass() { data 0; } // 带参数的构造函数 MyClass(int value) { data value; } …

【vue核心技术实战精讲】1.9 Vue指令之v-model双向数据绑定

文章目录 前言本节内容1、v-model2、总结v-model 双向的数据绑定双向数据流&#xff08;绑定&#xff09; v-bind 和 v-model 的区别? 3-1、实战 <input>A、 输入框 type"text"示例效果 B、 单选按钮 type"radio"示例效果 C、 复选框 type"che…

|行业洞察·医药|《医药行业年终总结报告:政策篇-143页》

报告各部分的详细解读&#xff1a; 1. 政策概览 政策导读&#xff1a;2023年作为“十四五”发展时期的第三年&#xff0c;国家发布了许多关键性文件&#xff0c;对医药行业的采购、医保、医疗、医药等方面提出了明确的目标和规划。政策发布情况&#xff1a;截至12月19日&…

[LeetCode]516. 最长回文子序列[记忆化搜索解法详解]

最长回文子序列 LeetCode 原题链接 题目 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&#xff1a…

苹果应用商店上架工具的最新趋势与未来发展展望

摘要 移动应用app上架是开发者关注的重要环节&#xff0c;但常常会面临审核不通过等问题。为帮助开发者顺利完成上架工作&#xff0c;各种辅助工具应运而生。本文探讨移动应用app上架原理、常见辅助工具功能及其作用&#xff0c;最终指出合理使用工具的重要性。 引言 移动应…

YonBuilder移动开发基础——友开发App与自定义Loader

概述 在使用 YonBuilder移动开发 技术进行 App 项目开发时&#xff0c;我们需要使用YonStuido开发工具的 WIFI同步 功能进行项目代码的真机调试&#xff0c;友开发App 与 自定义Loader 都支持 WIFI同步 功能&#xff0c;那么两款 App 软件到底有什么区别&#xff0c;在开发过程…

C语言 | qsort()函数使用

目录&#xff1a; 1.qsort介绍 2.使⽤qsort函数 排序 整型数据 3.使⽤qsort函数 排序 结构体数据 4. qsort函数的模拟实现冒泡排序 qsort()函数 是一个 C语言编译器函数库自带的排序函数&#xff0c; 它可以对指定数组&#xff08;包括字符串&#xff0c;二维数组&#x…

STM32CubeMX学习笔记28---FreeRTOS软件定时器

一、软件定时器简介 1 、基本概念 定时器&#xff0c;是指从指定的时刻开始&#xff0c;经过一个指定时间&#xff0c;然后触发一个超时事件&#xff0c;用户 可以自定义定时器的周期与频率。类似生活中的闹钟&#xff0c;我们可以设置闹钟每天什么时候响&#xff0c; 还能设置…

【车体坐标系与世界坐标系的互相转换】能够一眼看懂的知识点!!!

本文讲解车体坐标系与世界坐标系互相转换的数学推导&#xff0c;如下图所示 将waypoint坐标从车体坐标系转换到世界坐标系&#xff1a; [ x ′ y ′ z ′ ] [ x y z ] [ cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ 0 0 0 1 ] \left[\begin{array}{lll} x^{\prime} & …

产品经理的自我修养

点击下载《产品经理的自我修养》 1. 前言 在产品领域取得成功的关键在于持续的激情。只有保持热情不减,我们才能克服各种困难,打造出卓越的产品。 如果你真心渴望追求产品之路,我强烈建议你立即行动起来,亲自参与实际的产品创作。无论是建立一个网站、创建一个社群,还是…