class Solution:
#todo 单调栈 做不出来,以当前点作为最低点
def maximumScore(self,nums:List[int],k:int):
n = len(nums)
q = list()
left = [-1] * n
right = [n] * n
for i in range(n):
while q and nums[i] <= nums[q[-1]]:
q.pop()
if q:
left[i] = q[-1]
q.append(i)
q = list()
for i in range(n-1,-1,-1):
while q and nums[i] <= nums[q[-1]]:
q.pop()
if q:
right[i] = q[-1]
q.append(i)
ans = 0
for i in range(n):
if left[i] <= k <= right[i]:
ans = max(ans,nums[i] * (right[i] -left[i] - 1))
return ans
关于#lc-1793#的问题,请各位专家解答!
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
如果答案让您满意,请采纳、关注,非常感谢!
这段代码实现的功能是计算列表nums中的元素经过若干次取最大值后得到的最大分数。具体来说,给定一个索引k,要求在索引左右两侧取值并将其乘积相加,找到能够得到的最大值。 代码使用了单调栈的思想,分别计算了每个索引左侧和右侧第一个小于当前值的索引位置,然后计算以当前值为最低点得到的最大分数。最终找到满足条件的最大分数并返回。 以下是代码的实现:from typing import List class Solution: def maximumScore(self, nums: List[int], k: int): n = len(nums) q = list() left = [-1] * n right = [n] * n for i in range(n): while q and nums[i] <= nums[q[-1]]: q.pop() if q: left[i] = q[-1] q.append(i) q = list() for i in range(n-1, -1, -1): while q and nums[i] <= nums[q[-1]]: q.pop() if q: right[i] = q[-1] q.append(i) ans = 0 for i in range(n): if left[i] <= k <= right[i]: ans = max(ans, nums[i] * (right[i] - left[i] - 1)) return ans希望能帮到您解答问题。
解决 无用评论 打赏 举报