Python中最大和的分区数组
假设我们有一个整数数组A,我们必须将该数组划分为最大为K的(连续)个子数组。分区后,每个子数组的值都更改为该子数组的最大值。分区后,我们必须找到给定数组的最大和。因此,如果输入类似于[1、15、7、9、2、5、10]且k=3,则输出为84。这是因为数组变为[15、15、15、9、10、10,10]
为了解决这个问题,我们将遵循以下步骤-
使一个数组dp的长度与A相同,并用0填充
对于范围从0到A-1的i
如果i–j>=0
dp[i]:=dp[i]的最大值,并且(temp*(i–index+1)+dp[index-1])
索引:=i–j
temp:=temp和A[i-j]的最大值
如果索引–1>=0,则
否则dp[i]:=dp[i]的最大值和0
如果i–1>=0,则dp[i]=A[i]+dp[i-1]否则为0
温度:=A[i]
对于1到k–1的j
返回dp的最后一个元素
让我们看下面的实现以更好地理解-
示例
class Solution(object): def maxSumAfterPartitioning(self, A, K): dp = [0 for i in range(len(A))] for i in range(len(A)): dp[i] = A[i] + (dp[i-1] if i-1>=0 else 0) temp = A[i] for j in range(1,K): if i-j>=0: index = i-j temp = max(temp,A[i-j]) dp[i] = max(dp[i],temp*(i-index+1) + (dp[index-1] if index-1 >=0 else 0)) return dp[-1] ob = Solution()print(ob.maxSumAfterPartitioning([1,15,7,9,2,5,10],3))
输入值
[1,15,7,9,2,5,10] 3
输出结果
84