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

怎么做网站建设哪里可以代写软文

怎么做网站建设,哪里可以代写软文,销售网站建设的短文,php企业网站系统想要精通算法和SQL的成长之路 - 柱状图中最大的矩形前言一. 柱状图中最大的矩形前言 想要精通算法和SQL的成长之路 - 系列导航 一. 柱状图中最大的矩形 原题链接 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求…

想要精通算法和SQL的成长之路 - 柱状图中最大的矩形

  • 前言
  • 一. 柱状图中最大的矩形

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 柱状图中最大的矩形

原题链接

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

在这里插入图片描述
这道题目我们可以仿照着接雨水这道题目来做。

思路:

  1. 我们可以遍历所有的柱子,在每次遍历的时候,我们以当前柱子作为一个中心点。
  2. 我们分别向左、向右各自寻找第一个小于当前高度的柱子,找到他们的索引分别是leftright
  3. 那么以当前柱子为固定高度的最大面积就是 :(right-left-1)* curHeight

那么我们来看下题目给的案例,按按照这个思想来做是否可行呢?当我们以第一根柱子作为中心,向两侧寻找第一个最低点的时候,就出问题啦:
在这里插入图片描述
那好,我们对此情况,我们稍微改造改造,我们给数组两侧添加两个虚拟节点,高度是0,如图:
在这里插入图片描述
那么这样的话,left=0,cur=1,right=2。以高度为2去寻找最大面积的话,就是2*(2-0-1)=2了。

我们再来看下以柱子高度5的为中心:
在这里插入图片描述

我们在试想一下,既然我们要以每个遍历的节点为中心,并寻找到左右两侧第一个比他小的元素。那么我们就可以使用单调递增栈来完成。

前期准备部分,我们先给数组添加两个虚拟节点

int[] tmpHeight = new int[heights.length + 2];
for (int i = 1; i <= heights.length; i++) {tmpHeight[i] = heights[i - 1];
}

然后我们再看看递归过程:

  • 既然我们需要单调递增,那么遇到小的,就应该把当前栈内比当前高度高的,给剔除(同时计算高度)。也就保证了循环:while (!stack.isEmpty()&&tmpHeight[stack.peek()]>tmpHeight[right])因为无论怎么样,我们必须要把当前元素给放到栈中的。不能不放。
  • 既然是单调递增栈,那么栈顶元素和栈中的第二个元素就是我们要的中心元素、左侧第一个比栈顶元素小的。而当前元素就是右侧第一个比栈顶元素小的。看图能更直观点(红框部分),这时候遍历的时候,栈中元素有0和2,当遇到1的时候,满足while条件。
    在这里插入图片描述
for (int right = 0; right < tmpHeight.length; right++) {// 一旦遇到某个节点比当前节点小了,就可以计算面积了。while (!stack.isEmpty() && tmpHeight[stack.peek()] > tmpHeight[right]) {// 栈顶元素(也就是我们说的中心柱子)int current = stack.pop();// left是左侧第一个比中心柱子矮的,right就是右侧第一个比中心柱子高的,// 因为在tmpHeight[stack.peek()] > tmpHeight[right]的前提约束下Integer left = stack.peek();// 计算面积res = Math.max(res, (right - left - 1) * tmpHeight[current]);}stack.push(right);
}

最终代码如下:

public int largestRectangleArea(int[] heights) {int res = 0;// 单调栈递增LinkedList<Integer> stack = new LinkedList<>();// 增加两个虚拟节点的临时数组int[] tmpHeight = new int[heights.length + 2];for (int i = 1; i <= heights.length; i++) {tmpHeight[i] = heights[i - 1];}for (int right = 0; right < tmpHeight.length; right++) {// 一旦遇到某个节点比当前节点小了,就可以计算面积了。while (!stack.isEmpty() && tmpHeight[stack.peek()] > tmpHeight[right]) {// 栈顶元素(也就是我们说的中心柱子)int current = stack.pop();// left是左侧第一个比中心柱子矮的,right就是右侧第一个比中心柱子高的,// 因为在tmpHeight[stack.peek()] > tmpHeight[right]的前提约束下Integer left = stack.peek();// 计算面积res = Math.max(res, (right - left - 1) * tmpHeight[current]);}stack.push(right);}return res;
}
http://www.dt0577.cn/news/27597.html

相关文章:

  • 查网站怎么做的整站优化系统
  • 软件开发企业上海网站seo公司
  • 建站宝盒全能版seo外包公司兴田德润
  • 网站开发与设计模板seo 页面
  • wordpress调用不同头部文件seo网站优化助理
  • 做购物网站如何推广十大计算机培训学校
  • 重庆免费建站鹤壁seo公司
  • 做网站设计的总结百度官方网页
  • 某男神去年年底来某网站做见面会_竟要求安保人数超过两位数企业网站页面设计
  • 青岛做网站建设的公司哪家好最近新闻报道
  • 经营网站备案信息太原做网络推广的公司
  • 遵义市住房和城乡建设局官方网站6怎样推广自己的app
  • 如何与别的网站做友情链接网络产品运营与推广
  • 重庆网络干部学院seo软文是什么意思
  • 网站数据库模版网站备案查询工信部官网
  • 网站开发域名注册微营销平台系统
  • 如何设计大气的网站seo是广告投放吗
  • 网站建设应用技术网络推广营销软件
  • 禹州网站建设深圳市昊客网络科技有限公司
  • 网站开发设计合同北京seo设计公司
  • 沈阳做网站在哪推广营销是什么
  • 有了域名自己电脑怎么做网站微信指数官网
  • 做现货黄金网站关键词排名客服
  • 紧紧抓住推进党风廉政建设的"牛鼻子"中央纪委监察部网站网站收录怎么弄
  • 城乡建设网站证件查询优化大师app
  • 网站无域名注册人id中国网站访问量排行
  • 高端网站建设信息如何自己开网站
  • 做赌博网站犯法吗网站的推广方案的内容有哪些
  • 网站改版数据来源表改怎么做营销软文范文200字
  • 如何开发微信微网站哪些平台可以免费发布产品