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

网站备案初审时间东莞松山湖招聘

网站备案初审时间,东莞松山湖招聘,搜索引擎优化简称seo,wordpress产品图片文章目录 Day60 柱状图中最大的矩形题目思路代码 Day60 柱状图中最大的矩形 84. 柱状图中最大的矩形 - 力扣(LeetCode) 题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图…

文章目录

  • Day60
    • 柱状图中最大的矩形
      • 题目
      • 思路
      • 代码

Day60

柱状图中最大的矩形

84. 柱状图中最大的矩形 - 力扣(LeetCode)

题目

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

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

思路

本题和42. 接雨水 (opens new window),是遥相呼应的两道题目

接雨水要查找的是右边第一个比元素大的值进行计算,所以使用了递增单调栈(从栈口到栈底)

本题要查找的是右边第一个比元素小的值进行计算,所以使用了递减单调栈(从栈口到栈底)

本题是要找每个柱子左右两边第一个小于该柱子的柱子,所以从栈头(元素从栈头弹出)到栈底的顺序应该是从大到小的顺序!

栈顶和栈顶的下一个元素以及要入栈的三个元素组成了我们要求最大面积的高度和宽度

理解这一点,对单调栈就掌握的比较到位了。

除了栈内元素顺序和接雨水不同,剩下的逻辑就都差不多了,在题解42. 接雨水 (opens new window)我已经对单调栈的各个方面做了详细讲解,这里就不赘述了。

主要就是分析清楚如下三种情况:

  • 情况一:当前遍历的元素heights[i]大于栈顶元素heights[st.top()]的情况
  • 情况二:当前遍历的元素heights[i]等于栈顶元素heights[st.top()]的情况
  • 情况三:当前遍历的元素heights[i]小于栈顶元素heights[st.top()]的情况

细节:

末尾为什么要加元素0?

如果数组本身就是升序的,例如[2,4,6,8],那么入栈之后 都是单调递减,一直都没有走 情况三 计算结果的哪一步,所以最后输出的就是0了。 如图:

那么结尾加一个0,就会让栈里的所有元素,走到情况三的逻辑。

开头为什么要加元素0?

如果数组本身是降序的,例如 [8,6,4,2],在 8 入栈后,6 开始与8 进行比较,此时我们得到 mid(8),rigt(6),但是得不到 left。

(mid、left,right 都是对应版本一里的逻辑)

因为 将 8 弹出之后,栈里没有元素了,那么为了避免空栈取值,直接跳过了计算结果的逻辑。

之后又将6 加入栈(此时8已经弹出了),然后 就是 4 与 栈口元素 8 进行比较,周而复始,那么计算的最后结果resutl就是0。 如图所示:

代码

class Solution {public int largestRectangleArea(int[] heights) {int newHeights[] = new int[heights.length + 2];newHeights[0] = 0;newHeights[newHeights.length - 1] = 0;for(int i = 0; i < heights.length; i++) newHeights[i + 1] = heights[i];LinkedList<Integer> stack = new LinkedList<>();stack.push(0);int sum = 0;for(int i = 1; i < newHeights.length; i++){int position = stack.peek();if(newHeights[i] > newHeights[position]){stack.push(i);}else if(newHeights[i] == newHeights[position]){// 这里可以不做操作stack.pop();stack.push(i);}else{while(!stack.isEmpty() && newHeights[i] < newHeights[stack.peek()]){int mid = stack.peek();stack.pop();if(!stack.isEmpty()){int left = stack.peek();int right = i;int w = right - left - 1;int h = newHeights[mid];sum = Math.max(sum, w * h);}}stack.push(i);}}return sum;}
}
http://www.yayakq.cn/news/790664/

相关文章:

  • 天翼云主机 网站服务器六安网站价格
  • 计算机 网站开发 文章单位门户网站是什么意思
  • 网站设计趋势在线注册网站
  • 百度微信网站文件注入网站
  • 优秀企业网站的特点小程序制作一般多少钱
  • 深圳网站建设的服务怎么样网站域名地址是什么
  • 织梦网站栏目调用用ps设计网页页面步骤
  • 网站个人建设wordpress怎么搜索网站
  • 建设区服务网站攀枝花网站开发
  • 网站开发设计书百度网页怎么设置成电脑版
  • 福田时代汽车官方网站网站建设需求分析的功能
  • 网站蓝色导航栏代码视频分享网站怎么做
  • 中国住房城乡和城乡建设部网站怎么查公司信息
  • 济南网站的优化wordpress做在线编辑图片大小
  • 微信运营技巧网站推广优化张店
  • 企业营销微网站建设网件路由器重置
  • 教学互动网站的设计电子商务网站建设与维护方法
  • c语言开发网站教程常州市住房和城乡建设局网站
  • 深圳门窗在哪里网站做推广wordpress内容页不显示
  • 站长工具大全集工厂订单外发代加工外发加工网
  • 58同城通辽做网站徐州专业网站制作
  • 个人网站建设网站排名优化产品网页设计公司
  • 汕头网站建设平台重庆轨道交通最新
  • 家居网站关键词怎么做临沂网站建设团队
  • 制作卖东西网站网站怎么做数据接口
  • 青岛网站制作公司网络35岁以后的程序员有多惨
  • 58同城一样的网站怎样建设如何做自己的网站商城站
  • 电商公司网站wordpress 36kr
  • 网站免费大全做外贸怎么进入国外的网站
  • 如何用网站做淘客网站好友邀请链接生成 php