首页 > 编程语言 > 详细

[LeetCode]题解(python):084-Largest Rectangle in Histogram

时间:2016-02-24 17:29:51      阅读:191      评论:0      收藏:0      [点我收藏+]

题目来源:

  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

 

[LeetCode]题解(python):084-Largest Rectangle in Histogram

原文:http://www.cnblogs.com/chruny/p/5213588.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!