跳到主要内容

2866.美丽塔II

链接:2866.美丽塔II
难度:Medium
标签:栈、数组、单调栈
简介:请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

题解 1 - python

  • 编辑时间:2023-12-21
  • 执行用时:316ms
  • 内存消耗:42.55MB
  • 编程语言:python
  • 解法介绍:字符串拼接。
class Solution:
def maximumSumOfHeights(self, maxHeights: List[int]) -> int:
n = len(maxHeights)
prev = [-1] * n
next = [n] * n
s = []
for i in range(n):
while s and maxHeights[s[-1]] >= maxHeights[i]: s.pop()
if s: prev[i] = s[-1]
s.append(i)
s.clear()
for i in range(n):
while s and maxHeights[s[-1]] > maxHeights[i]: next[s.pop()] = i
s.append(i)
lsums = [0] * n
rsums = [0] * n
for i in range(n):
lsums[i] += (i - prev[i]) * maxHeights[i]
if prev[i] != -1: lsums[i] += lsums[prev[i]]
for i in range(n - 1, -1, -1):
rsums[i] += (next[i] - i) * maxHeights[i]
if next[i] != n: rsums[i] += rsums[next[i]]
return max(lsums[i] + rsums[i] - maxHeights[i] for i in range(n))