zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):084-Largest Rectangle in Histogram

    题目来源:

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


    题意分析:

      给定一个数组,数组的数字代表这个位置上的bar的高度,在这些bar中找出最大面积的矩阵。例如height = [2,1,5,6,2,3]得到的图是

    那么他的最大面积是

    所以结果是10.


    题目思路:

      这是一道巧妙的算法题。首先,将bar的高度append到stack里,当遇到新的高度的时候就有3种情况,①如果newheight > stack[-1],那么将这个高度append到stack里面;②如果相等,那么忽略;③如果newheight < stack[-1],那么将stack里面的元素pop出来并且记录到这个高度的最大面积,直到stack为空,或者高度大于当前高度。


    代码(python):

      

     1 class Solution(object):
     2     def largestRectangleArea(self, heights):
     3         """
     4         :type heights: List[int]
     5         :rtype: int
     6         """
     7         mans = 0
     8         ans,ansindex,i = [],[],0
     9         while i < len(heights):
    10             if len(ans) == 0:
    11                 ans.append(heights[i])
    12                 ansindex.append(i)
    13             else:
    14                 if heights[i] >= ans[-1]:
    15                     ans.append(heights[i])
    16                     ansindex.append(i)
    17                 else:
    18                     lastindex = 0
    19                     while len(ans) > 0 and ans[-1] > heights[i]:
    20                         tmp = ans.pop()
    21                         lastindex = ansindex.pop()
    22                         mans = max(mans,tmp*(i - lastindex))
    23                     ans.append(heights[i])
    24                     ansindex.append(lastindex)
    25             i += 1
    26         lastindex = 0
    27         while len(ans) != 0:
    28             tmp = ans.pop()
    29             mans = max(mans,tmp*(len(heights) - ansindex.pop()))
    30         return mans
    View Code
  • 相关阅读:
    SpringFramework|@Autowired
    SpringFramework|@Required的使用
    SpringFramework|基于XML的两种自动装配
    SpringFramework|基于XML的各类集合注入
    SpringFramework|基于XML的依赖注入
    erlang vim
    svn 强制输入提交日志
    vim配置
    克隆centos6后配置网络
    git 免密
  • 原文地址:https://www.cnblogs.com/chruny/p/5213588.html
Copyright © 2011-2022 走看看