码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-04-26 18:39:08      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:规划   EAP   image   bsp   tco   turn   else   技术   img   

题目描述:

技术图片

 

 

技术图片

 

 方法一:动态规划 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-带限制的子序列和

标签:规划   EAP   image   bsp   tco   turn   else   技术   img   

原文地址:https://www.cnblogs.com/oldby/p/12781279.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!