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