当前位置: 首页 > news >正文

【LeetCode 算法笔记】84. 柱状图中最大的矩形

目录

  • 问题描述
  • 暴力求解:

问题描述

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。

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

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

提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100

暴力求解:

面积 = 宽(几个数字的数量)* 高 (其中最小的数字的值)
从头开始,对于每一个元素搜索一遍后面所有的元素,输出面积最大的值。

class Solution:def largestRectangleArea(self, heights: List[int]) -> int:area = 0n = len(heights)for i in range(n):for j in range(i, n):w = j - i + 1h = min(heights[i:j+1])s = w * harea = s if s > area else areareturn area

算法复杂度: O ( N 2 ) O(N^2) O(N2)
如果 LeetCode 上提交暴力求解的代码,会因为超时不通过

创建栈,存储还无法确定边界的柱子下标。如果右边的柱子高度比栈顶矮,开始从栈顶弹出并计算面积。

class Solution:def largestRectangleArea(self, heights: List[int]) -> int:heights.append(0)   # 列尾插入哨兵stack = [-1]        # 栈首插入哨兵area = 0n = len(heights)for i in range(n):while(heights[i] < heights[stack[-1]]): k = stack.pop()left = stack[-1]width = i - left - 1s = width * heights[k]area = s if s > area else areastack.append(i)return area

算法复杂度: O ( N ) O(N) O(N)


http://www.mrgr.cn/news/27176.html

相关文章:

  • CentOS 入门
  • 切换淘宝最新镜像源npm
  • c++ 的iostream 和 c++的stdio的区别和联系
  • 每日OJ_牛客_NC313 两个数组的交集
  • o1模型:引领AI技术在STEM领域的突破与应用
  • 高教社杯数模竞赛特辑论文篇-2016年A题:基于极值优化的系泊系统设计
  • 模仿抖音用户ID加密ID的算法MB4E,提高自己平台ID安全性
  • Linux中,过滤经过服务器的MAC地址通常涉及几个步骤,包括查看当前连接的MAC地址、使用iptables进行MAC地址过滤
  • 【uni-app】小兔鲜项目--拉取小兔鲜儿项目模板代码
  • 深入理解 Spring 事务管理及其配置
  • 数据库连接池与Druid【后端 16】
  • MySql基础-单表操作
  • 计算机基础知识
  • ARM驱动学习之9注册字符类设备
  • Java 语法基础
  • 重拾java-------day1(基础计算机背景)
  • 基于SpringBoot+Vue的考务报名平台(带1w+文档)
  • 带你0到1之QT编程:十、一举击破开发中常用的Button按钮组
  • 【网络安全 | 代码审计】JFinal之DenyAccessJsp绕过
  • 代码随想录打卡Day32