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