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
  • 相关阅读:
    C# 英语纠错 LanguageTool
    WPF TreeView 虚拟化-设置滚动到选中项
    C# 同步更新系统时间
    C# 重置IE安全等级
    C# IE环境
    C# IE环境
    WPF ObservableCollection 异步调用问题
    C# 以函数Action/Func/Task作为方法参数
    WPF Geometry 引用Path数据
    ResourceDictionary主题资源替换(一) :通过加载顺序来覆盖之前的主题资源
  • 原文地址:https://www.cnblogs.com/chruny/p/5213588.html
Copyright © 2011-2022 走看看