Skip to content

Commit e980937

Browse files
joshua-dierickse-altiWolf22
authored andcommitted
Time: 2368 ms (5.05%) | Memory: 39.4 MB (5.74%) - LeetSync
Co-authored-by: Joshua Dierickse <joshua.dierickse@gmail.com>
1 parent 4694c0b commit e980937

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import heapq
2+
3+
class Node:
4+
def __init__(self, left, right, height, width):
5+
self.left = left
6+
self.right = right
7+
self.height = height
8+
self.width = width
9+
self.deleted = False
10+
11+
def __eq__(self, other):
12+
return self.height == other.height
13+
14+
def __lt__(self, other):
15+
return self.height * -1 < other.height * -1
16+
17+
def del_right_node(node):
18+
node.width += node.right.width
19+
node.height = node.right.height
20+
node.right.deleted = True
21+
node.right = node.right.right
22+
if node.right:
23+
node.right.left = node
24+
25+
def del_left_node(node):
26+
node.width += node.left.width
27+
node.height = node.left.height
28+
node.left.deleted = True
29+
node.left = node.left.left
30+
if node.left:
31+
node.left.right = node
32+
33+
def print_ll(node):
34+
while node.left:
35+
node = node.left
36+
37+
print("---")
38+
39+
while node:
40+
print("height: ", node.height, ", width", node.width)
41+
node = node.right
42+
43+
class Solution:
44+
def largestRectangleArea(self, heights: List[int]) -> int:
45+
ll = None
46+
heap = []
47+
48+
m = 0
49+
50+
for height in heights:
51+
m = max(m, height)
52+
prev = ll
53+
ll = Node(ll, None, height, 1)
54+
if prev:
55+
prev.right = ll
56+
heapq.heappush(heap, ll)
57+
58+
while heap:
59+
node = heapq.heappop(heap)
60+
if node.deleted:
61+
continue
62+
63+
if node.left and node.right:
64+
if node.left.height < node.right.height:
65+
del_right_node(node)
66+
else:
67+
del_left_node(node)
68+
elif node.left:
69+
del_left_node(node)
70+
elif node.right:
71+
del_right_node(node)
72+
else:
73+
continue
74+
75+
heapq.heappush(heap, node)
76+
77+
m = max(m, node.height * node.width)
78+
79+
return m
80+

0 commit comments

Comments
 (0)