-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbeautiful-towers-ii.py
27 lines (27 loc) · 996 Bytes
/
beautiful-towers-ii.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution:
def maximumSumOfHeights(self, maxHeights: List[int]) -> int:
n = len(maxHeights)
pref = [0] * n
suff = [0] * n
stack = []
for i in range(n):
while len(stack) > 0 and maxHeights[i] < maxHeights[stack[-1]]:
stack.pop()
if len(stack) > 0:
pref[i] = maxHeights[i] * (i - stack[-1]) + pref[stack[-1]]
else:
pref[i] = maxHeights[i] * (i + 1)
stack.append(i)
stack = []
for i in range(n - 1, -1, -1):
while len(stack) > 0 and maxHeights[i] < maxHeights[stack[-1]]:
stack.pop()
if len(stack) > 0:
suff[i] = maxHeights[i] * (stack[-1] - i) + suff[stack[-1]]
else:
suff[i] = maxHeights[i] * (n - i)
stack.append(i)
res = 0
for i in range(n):
res = max(res, pref[i] + suff[i] - maxHeights[i])
return res