java 柱状图 宽度_Java实现 LeetCode 84 柱状图中最大得矩形

84. 柱状图中最大的矩形

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

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

28f4b4aff313acffa3156dec27236d35.png

以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。

d577f331c47ae5282f0e492e52af8d11.png

图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

示例:

输入: [2,1,5,6,2,3]

输出: 10

class Solution {

/**

* 利用单调栈 求解,总体思路是 以柱子i高度为矩形高度时所能形成最大面积(利用性质找出第i个柱子向左边和右边遍历时第一个比它低的柱子)

* 单调栈定义:只存高度递增的柱子

* 性质

* 出栈时:

* 那么如果单调栈为空了:说明没有比这个柱子更低的了(矩形宽度为这根柱子的序号:左边沿为0)

* 如果单调栈不为空:说明栈里面的柱子高度都小,那么左边沿为栈顶柱子的序号

*

* 矩形右边沿为i 因为你出栈 就说明你比别人低了,这已经是你能达到的面积极限了.出栈记录面积

* **/

public static int largestRectangleArea(int[] heights) {

int heightn[] =new int[heights.length+1];

for (int i = 0; i < heights.length; i++) {

heightn[i] = heights[i];

}

heightn[heights.length] = 0; //最后增加个高度为0 的柱子,以便吧单调栈里面的都弹出去。

Deque stack =new ArrayDeque<>(); //存储序号

int maxS=0;

for (int i = 0; i < heightn.length;i++) {

while (!stack.isEmpty() && heightn[i]

int temp=stack.pop();

//这里是递减数列得长度

maxS= Math.max(maxS,( ( stack.isEmpty()?i:(i-stack.peek()-1) )*heights[temp] ));

}

stack.push(i); //入栈

}

return maxS;

}

}

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

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

相关文章

python坐标轴刻度设置对数_用对数刻度设置刻度

我将添加一些图并显示如何删除较小的刻度线&#xff1a;OP&#xff1a;from matplotlib import pyplot as pltfig1, ax1 plt.subplots()ax1.plot([10, 100, 1000], [1,2,3])ax1.set_xscale(log)ax1.set_xticks([20, 300, 500])plt.show()如tcaswell所指出的&#xff0c;要添加…

java中为什么要用注解_java中的注解,真的很重要,你理解了嘛?

这篇文章开始讲解java中的注解&#xff0c;在平时的开发当中我相信你或多或少的接触过注解。比如你可能都见过override&#xff0c;它代表的就是一个注解。但是&#xff0c;为了更加清晰的去介绍注解&#xff0c;我还是先给出一个例子&#xff0c;让你能够方便的理解。一、认识…

qtdesigner右击按钮没有 to slot_或添加“力感按钮”再升级,Apple Pencil会更“能打”?...

&#xff3b;钉科技编译&#xff3d;“I have a pen/I have an apple/Ah apple pen”&#xff0c;钉科技编辑写到的这些“歌词”&#xff0c;看上去是不是很熟悉&#xff1f;对了&#xff0c;这是搞笑艺人Piko Taro那支颇“洗脑”的《PPAP》里的内容。其实&#xff0c;如果说到…

android jni 调用java_Android 基于NDK的JNI开发 C调用java和java调用C

首先&#xff0c;这里所要讲的主要是C调用java的&#xff0c;因为这里网上也没有一个详细的资料&#xff0c;其次&#xff0c;我开发android应用没多久&#xff0c;其中java错误敬请谅解&#xff01;关于配置NDK环境问题应该不用再赘述了&#xff0c;这个网上有很多&#xff0c…

python手绘教学_Python实现手绘功能

手绘图确实很好看&#xff0c;但对于手残党的我&#xff0c;只能呵呵一笑&#xff0c;今天就用代码来实现手绘功能&#xff0c;把普通的图片转换为手绘图片。代码from PIL import Imageimport numpy as npa np.asarray(Image.open(rC:\Users\luopan\Desktop\1.jpg).convert(L)…

java三级报名_java web 学习 --第四天(Java三级考试)

jsp内置对象 outout属性类型&#xff1a;JspWriter 作用域&#xff1a;page 作用&#xff1a;一个输出缓存流&#xff0c;向客户端浏览器输出信息JspWriter类中常用的方法和功能flush() 输出缓存区的数据close() 关闭输出流clearBuffer() 清除缓存区的数据&#xff0c;并把数据…

面试pythone_python面试常见问题有哪些

python面试常见问题有&#xff1a;1、Python是如何被解释的&#xff1b;2、什么是PEP8&#xff1b;3、Python是怎样管理内存的&#xff1b;4、什么是Python装饰器&#xff1b;5、Python提供哪些内置类型等等。大量免费学习推荐&#xff0c;敬请访问python教程(视频)python面试常…

tlab java_浅析java中的TLAB

好久&#xff0c;好久....没有更博客了。这一次利用闲暇时间&#xff0c;来扯一下关于JVM中的TLAB。什么是TLAB&#xff1f;它是干什么的&#xff1f;咋们先抛开这个问题&#xff0c;一切的开始得从new对象到指针碰撞开始讲起。new对象与指针碰撞new对象怎么就出问题了呢&#…

选择排序算法流程图_常用排序算法之选择排序

前两天给大家分享了冒泡排序和插入排序(没关注的同学&#xff0c;可以关注后查看历史消息)&#xff0c;今天继续给大家分享另一种常用的排序算法--选择排序。选择排序选择排序和插入排序很相似&#xff0c;也区分已排序区间和未排序区间&#xff0c;选择排序是每次从未排序区间…

pygame小游戏代码_Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏...

Py之pygame&#xff1a;有趣好玩——利用pygame库实现一个移动底座弹球的小游戏目录输出结果实现代码输出结果​实现代码# -*- coding: utf-8 -*-#Py之pygame&#xff1a;有趣好玩——利用pygame库实现一个移动底座弹球的小游戏import pygame as pg from pygame.locals import …

java 小题目_java一个小题目

1.给定一个字符串String s"abcdefg";将字符串倒序成一个新字符串2.判断一个字符串是不是回文字符串 比如&#xff1a;"abcdcba" "上海自来水来自海上"1.解Java代码package com.newer.cjl.api;public class zuoye1 {public static void main(Stri…

python中字典的输出序列_python3:序列_字典(常用基础知识)

#字典&#xff1a;字典&#xff1a;无序的、可变的序列&#xff0c;也称关联数组&#xff0c;或散列表①格式{键:值}②通过键读取元素③字典是任意对象的无序集合④字典可任意嵌套&#xff0c;如元素可以为列表、字典、列表的列表等⑤字典的键必须是唯一的。不可重复&#xff0…

jenkins 集成java搅拌_如何将Gauge与Jenkins集成

我对Gauge测试工具有点熟悉&#xff0c;现在我正在通过Jenkins执行它 .首先&#xff1a;我在"Execute Windows Batch Command"字段中设置 gauge --version . 这是输出&#xff1a;Started by user anonymousBuilding in workspace C:\jenkins\workspace\Run_Gauge_Te…

大学生python实验心得体会_大学生实训心得体会3篇

转眼间为期两个星期的实训就结束了&#xff0c;但是安利公司的物流配送、黄埔港、益邦物流公司、南沙港以及学校里面的航海模拟实验中心、轮机实训实验楼这些实训过程仍历历在目。以下是小编整理的大学生实训心得体会&#xff0c;欢迎阅读。大学生实训心得体会1通过实训中心老师…

大白菜pe解锁bitlocker_微PE工具箱 v2.1 官方版,最好用的 Win10PE 系统

微PE工具箱 v2.1 – 最好用的WinPE装机维护工具&#xff01;WinPE工具箱&#xff0c;装机维护最得力的助手&#xff0c;最后救命稻草。化繁为简&#xff0c;小材大用&#xff0c;一键安装&#xff0c;极速启动。微PE工具箱&#xff0c;最好用的PE工具箱&#xff0c;没有之一。无…

mysql5.6 pt-query-digest_pt-query-digest安装及分析

slow log 设置&#xff1a;cat my.cnf# For advice on how to change settings please see# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html[mysqld]#skip-grant-tables# Remove leading # and set to the amount of RAM for the most important …

mysql的执行效率_数据库执行效率的对比测试

今天看了一篇很有意思的文章&#xff0c;对比数据库和普通编程语言的效率测试&#xff0c;测试的语言分别是mysql的存储过程&#xff0c;oracle plsql和perl.测试机器是同一台机器上&#xff0c;测试标准是计算100万次的cos函数oracle代码create or replace procedure oraclesp…

linux修改python版本修改哪个配置文件_linux安装python修改默认python版本方法

linux默认是安装了python&#xff0c;默认是安装python2.6.6&#xff0c;可能安装的版本是不能符合我们需要的python要求的。我们需要重新安装python的版本&#xff0c;今天演示一下安装python3首先下载一个 wget 文件的地址 执行命令进行下载下载完成以后进行解压&#xff…

java算法的递归问题设计_java算法-递归算法思想

递归算法是跟常见的算法思想。使用递归算法&#xff0c;往往可以简化代码编写&#xff0c;提高程序的可读性。但是&#xff0c;不适合的递归往往导致程序的执行效率变低。一、递归算法基本思想递归算法即在程序中不断反复调用自身来叨叨求解问题的方法。此处的重点是调用自身&a…

delstr函数python_Python Day26:多态、封装、内置函数:__str__、__del__、反射(反省)、动态导入模块...

## 多态pythonOOP中标准解释:多个不同类型对象,可以响应同一个方法,并产生不同结果,即为多态多态好处:只要知道基类使用方法即可,不需要关心具体哪一个类的对象实现的,以不变应万变,提高灵活性/扩展性多态,一般都需要一个管理多态的方法,方法的函数就是类的对象,在方法中通过点…