Python 中的最大和陣列分割槽
假設我們有一個整數陣列 A,我們需要將其劃分為長度最多為 K 的(連續的)子陣列。分割槽後,每個子陣列的值都會更改為該子陣列的最大值。我們需要找到分割槽後給定陣列的最大和。因此,如果輸入類似於 [1, 15, 7, 9, 2, 5, 10] 且 k = 3,則輸出將為 84。這是因為陣列變為 [15, 15, 15, 9, 10, 10, 10]
為了解決這個問題,我們將遵循以下步驟:
- 建立一個與 A 長度相同的陣列 dp,並將其全部填充為 0
- 對於 i 從 0 到 A 的長度 - 1
- 如果 i – 1 >= 0,則 dp[i] = A[i] + dp[i - 1],否則為 0
- temp := A[i]
- 對於 j 從 1 到 k – 1
- 如果 i – j >= 0
- index := i – j
- temp := temp 和 A[i - j] 的最大值
- 如果 index – 1 >= 0,則
- dp[i] := dp[i] 和 (temp*(i – index + 1) + dp[index - 1]) 的最大值
- 否則 dp[i] := dp[i] 和 0 的最大值
- 如果 i – j >= 0
- 返回 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
廣告