DeepRest

Largest Rectangle in Histogram

Feb 4th, 2022 (edited)
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.16 KB | None | 0 0
  1. #One pass soln
  2. class Solution:
  3.     def largestRectangleArea(self, heights: List[int]) -> int:
  4.         res = 0
  5.         heights.append(-1)
  6.         st = [-1]  
  7.         for i, x in enumerate(heights):
  8.             while x < heights[st[-1]]:
  9.                 res = max(res, heights[st.pop()]*(i-st[-1]-1))
  10.             st.append(i)
  11.         return res
  12.  
  13. #multiple pass soln
  14. class Solution:
  15.     def largestRectangleArea(self, heights: List[int]) -> int:
  16.         n = len(heights)
  17.        
  18.         #previous smallest element problem
  19.         st = []  
  20.         prevs = [-1]*n
  21.         for i, e in enumerate(heights):
  22.             while st and heights[st[-1]] >= e:
  23.                 st.pop()
  24.             if st:
  25.                 prevs[i] = st[-1]
  26.             st.append(i)
  27.        
  28.         #next smallest element problem
  29.         st.clear()
  30.         nxts = [n]*n
  31.         for i, e in enumerate(heights):
  32.             while st and heights[st[-1]] >= e:
  33.                 nxts[st.pop()] = i  
  34.             st.append(i)
  35.        
  36.         res = 0
  37.         for i,x in enumerate(heights):
  38.             res = max(res, (nxts[i]-prevs[i]-1)*x)
  39.         return res
  40.        
Add Comment
Please, Sign In to add comment