leetcode-186周赛-5180-带限制的子序列和

Posted 真不知道叫啥好

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-186周赛-5180-带限制的子序列和相关的知识,希望对你有一定的参考价值。

题目描述:

 

 

 

 方法一:动态规划 O(n)

class Solution:
    def constrainedSubsetSum(self, nums, k: int):
        dp = [0]*len(nums)
        dp[0] = nums[0]
        arr = [(nums[0],0)]
        for i in range(1,len(nums)):
            M = arr[0][0]

            if M>=0:dp[i] = M+nums[i]
            else:dp[i] = nums[i]
            while arr and dp[i]>=arr[-1][0]:
                arr.pop()
            arr.append((dp[i],i))
            while arr[0][1]<(i-k+1):
                arr.pop(0)
        return max(dp)

方法二:堆

class Solution:
    def constrainedSubsetSum(self, nums: List[int], k: int) -> int:
        hq,s=[],-100000
        heapq.heappush(hq,(0,len(nums)))
        for i,x in enumerate(nums):
            while hq[0][1]<i-k: heapq.heappop(hq)
            t=-hq[0][0]+x
            s=max(s,t)
            heapq.heappush(hq,(-t,i))
        return s

 

以上是关于leetcode-186周赛-5180-带限制的子序列和的主要内容,如果未能解决你的问题,请参考以下文章

⭐算法入门⭐《队列 - 单调队列》困难02 —— LeetCode1425. 带限制的子序列和

leetcode 186. Reverse Words in a String II 旋转字符数组 ---------- java

Leetcode 第 173 场周赛 题解

leetcode-184周赛-5381-查询带键的排列

[LeetCode] 186. Reverse Words in a String II 翻转字符串中的单词 II

20.4.12 周赛 查询带键的排列 中等