Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.46 KB | None | 0 0
  1. class Solution:
  2.     def largestRectangleArea(self, heights: List[int]) -> int:
  3.         n = len(heights)
  4.         if (n == 1):
  5.             return heights[0]
  6.         if (n == 0):
  7.             return 0
  8.         if (n == 2):
  9.             max_high = max(heights)
  10.             min_high = min(heights)
  11.             return max(min_high * 2, max_high)
  12.         min_left = [0 for i in range(n)]
  13.         min_right = [0 for i in range(n)]
  14.         stack = [0]
  15.         for i in range(n):
  16.             while (len(stack) > 0 and heights[i] <= heights[stack[-1]]):
  17.                 stack.pop()
  18.             if (len(stack) > 0):
  19.                 min_left[i] = stack[-1]
  20.                 stack.append(i)
  21.             else:
  22.                 stack.append(i)
  23.                 min_left[i] = stack[-1]
  24.         stack = [n - 1]
  25.         for i in range(n - 1, -1, -1):
  26.             while (len(stack) > 0 and heights[i] <= heights[stack[-1]]):
  27.                 stack.pop()
  28.             if (len(stack) > 0):
  29.                 min_right[i] = stack[-1]
  30.                 stack.append(i)
  31.             else:
  32.                 stack.append(i)
  33.                 min_right[i] = stack[-1]
  34.         print(min_left)
  35.         print(min_right)
  36.         min_left[0] = -1
  37.         min_right[n - 1] = n
  38.         max_num = n * min(heights)
  39.         for i in range(n):
  40.             if ((min_right[i] - min_left[i] - 1) * heights[i] > max_num):
  41.                 max_num = (min_right[i] - min_left[i] - 1) * heights[i]
  42.         return max_num
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement