宇宙无敌飞天遁地大木木 2025-03-20 14:02 采纳率: 32.5%
浏览 7
已结题

关于#lc-1793#的问题,请各位专家解答!



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
  • 写回答

2条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-03-20 14:02
    关注
    让【道友老李】来帮你解答,本回答参考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
    

    希望能帮到您解答问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月20日
  • 创建了问题 3月20日