跳到主要内容

1793.好子数组的最大分数

链接:1793.好子数组的最大分数
难度:Hard
标签:栈、数组、双指针、二分查找、单调栈
简介:请你返回 好 子数组的最大可能 分数 。

题解 1 - python

  • 编辑时间:2024-03-19
  • 执行用时:266ms
  • 内存消耗:27.5MB
  • 编程语言:python
  • 解法介绍:先求出每个下标当最小值的范围,再对范围判断是否存在k。
class Solution:
def maximumScore(self, nums: List[int], k: int) -> int:
k += 1
nums = [inf] + nums + [inf]
s = []
n = len(nums)
arr1 = [0] * n
arr2 = [n - 1] * n
for i in range(1, n - 1):
while s and nums[s[-1]] > nums[i]:
arr2[s.pop()] = i
if s: arr1[i] = s[-1]
s.append(i)
ans = 0
for i in range(1, n - 1):
left = arr1[i]
right = arr2[i]
if left < k < right:
ans = max(ans, (right - left - 1) * nums[i])
return ans