非常难的问题,数组线性时间。

属于我之前说的解法的借助辅助空间。给定两个柱子,他们之间的面积由什么确定呢?没错,他们之间的距离和他们之间最矮的那个柱子的高度。我们并不知道这个柱子在什么位置,所以仅仅能遍历,这个复杂度就上去了。那有没有一个方法避免找中间小柱子呢?先想什么情况下不用找。除非你知道枚举出两个位置之间的柱子都比方今这个长。所以想到了用一个栈来保存较长的那些柱子编号。须要保证的一件事是栈里面的柱子高度一定是递增的,每次计算面积的时候是从当前位置往前计算的,计算一次弹出一次,每次都使用栈顶的高度,就像每次都计算被两个较矮柱子包裹的较高柱子们的面积。

整个算法的过程是这种,一開始栈为空,从左側開始扫,假设栈空,或者当前扫到的位置比栈顶的高度高,直接把编号入栈。为什么入栈的是编号而不是高度呢?由于求的是面积啊,假设仅仅压入面积,每次得到的就少了一维的信息啊亲。假设当前扫到的柱子比栈顶的低怎么办?出栈。注意在出栈时计算面积是不把当前扫到的位置计算在内的,每次都是把栈顶高度当做最低高度,计算从栈顶位置到当前位置前一位置的面积。这个出栈操作到什么时候呢?到栈空或者当前位置的高度最终比栈顶的高了。扫完一遍之后,栈非常可能非空,但里面的柱子肯定是递增的,直接运行一次出栈过程就能够了。

算法为什么是线性的?感觉过程好复杂。不复杂,每一个柱子一定仅仅进栈和出栈一次,想起matrix67对这样的问题的比喻,100天,我每天谈一个美眉,那么我可能失恋200次吗?大神就是大神。

class Solution {
public:
int largestRectangleArea(vector<int> &height) {
int res = 0, tpres, tp;
int msize = height.size();
int i = 0;
stack<int> s;
while(i<msize){
if(s.empty()||height[s.top()]<=height[i]){
s.push(i++);
}else{
tp = s.top();
s.pop();
tpres = height[tp]*(s.empty()?i:i-s.top()-1);
res = max(tpres, res);
}
}
while(!s.empty()){
tp = s.top();
s.pop();
tpres = height[tp]*(s.empty()?i:i-s.top()-1);
res = max(tpres, res);
}
return res;
}
};

leetcode第一刷_Largest Rectangle in Histogram的更多相关文章

  1. leetcode第一刷_Maximal Rectangle

    这个题比刚才那个更难. 假设没做过上一个,这个简直是无情. 先想一个笨笨的解法,如何确定一个矩形呢?找一个左上角,然后每行的看能延伸到什么位置.注意随着行数的添加,列数是仅仅能变短,不能变长. 想一下 ...

  2. 【LeetCode】84. Largest Rectangle in Histogram 柱状图中最大的矩形(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 单调栈 日期 题目地址: https://leetc ...

  3. 【LeetCode】84. Largest Rectangle in Histogram

    Largest Rectangle in Histogram Given n non-negative integers representing the histogram's bar height ...

  4. 【一天一道LeetCode】#84. Largest Rectangle in Histogram

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given n ...

  5. LeetCode OJ 84. Largest Rectangle in Histogram

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  6. 【LeetCode】084. Largest Rectangle in Histogram

    题目: Given n non-negative integers representing the histogram's bar height where the width of each ba ...

  7. 【LeetCode】84. Largest Rectangle in Histogram——直方图最大面积

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  8. leetcode@ [84/85] Largest Rectangle in Histogram & Maximal Rectangle

    https://leetcode.com/problems/largest-rectangle-in-histogram/ https://leetcode.com/problems/maximal- ...

  9. leetcode第一刷_Set Matrix Zeroes

    这个题乍一看非常easy,实际上还挺有技巧的.我最開始的想法是找一个特殊值标记.遇到一个0,把他所相应的行列中非零的元素标记成这个特殊值.0值保持不变,然后再从头遍历一次,碰到特殊值就转化成0. 问题 ...

随机推荐

  1. HNCU1741:算法3-2:行编辑程序

    http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1741 题目描述 一个简单的行编辑程序的功 ...

  2. 在uboot里面加入环境变量使用run来运行

    Author:杨正  Date:2014.11.11   Email:yz2012ww@gmail.com QQ:1209758756 在移植uboot的时候,能够在uboot里面加入定义一些自己的环 ...

  3. 巧用test判断来写shell脚本

    感觉最近很忙啊,阿里巴巴和百度马上就要笔试了,算法神马的还没有看..还是安心学习linux吧,决定在接下来的一周里,每天写一个shell script #!/bin/bash #输出提示语句,请输入一 ...

  4. DNS:因特网的目录服务

    作者:华科小涛,http://www.cnblogs.com/hust-ghtao/ 有两种方式来识别主机:通过主机名或IP地址.人们当然喜欢便于记忆的主机名,而路由器则喜欢定长的.有层次结构的IP地 ...

  5. nodejs安装不了和npm安装不了的解决方法

    http://caibaojian.com/nodejs-roll-back.html

  6. 基于 SSH 的工具叫 sshfs. sshfs 可以让你在本地直接挂载远程主机的文件系统

    另外一个很赞的基于 SSH 的工具叫 sshfs. sshfs 可以让你在本地直接挂载远程主机的文件系统. $ sshfs -o idmap=user user@hostname:/home/user ...

  7. WCF技术剖析之十七:消息(Message)详解(下篇)

    原文:WCF技术剖析之十七:消息(Message)详解(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]< ...

  8. HDU 2159 二维费用背包问题

    一个关于打怪升级的算法问题.. 题意:一个人在玩游戏老是要打怪升级,他愤怒了,现在,还差n经验升级,还有m的耐心度(为零就删游戏不玩了..),有m种怪,有一个最大的杀怪数s(杀超过m只也会删游戏的.. ...

  9. wxpython 32 位 ,python 64 位问题

    在安装Python Wxpython模块后,导入包的时候,会提示不支持64位的支持,需要安装Pythons 32 位,或者强制,使用Python 32 模式运行即可 在终端输入: defaults w ...

  10. U盘安装Ubuntu kylin版

    初试U盘安装Ubuntu14.04 kylin版  等待Ubuntu14.04 kylin版出来后,一直想要尝试在物理机进行安装体验,恰巧碰到五一假期,因为咱是穷人,没钱出去玩,所以就有了时间实地进行 ...