LeetCode1262.可被三整除的最大和
先貼上我寫的笨笨的程式碼,但是超時了。。。我用DP把nums列表中所有元素可能出現的組合都列舉出來,判斷是否被三整除;
class Solution(object):
def maxSumDivThree(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
ss = sum(nums)
maxSumDivThree = 0
# dp[i][j]陣列表示:前i個元素可以組合成j為True,否則為False
dp = [False] * (ss+1)
dp[0] = True
for i in range(len(nums)):
for j in range(ss, nums[i]-1, -1):
dp[j] = dp[j-nums[i]] or dp[j]
if dp[j] and j%3==0 and j>maxSumDivThree:
maxSumDivThree = j
return maxSumDivThree
該演算法的複雜度為O(N*sum),結果肯定就是:
於是,我學習了力扣大神的思路:動態規劃與狀態轉移
定義
dp[i][0]表示nums[0...i]模三餘零的最大和——零狀態:當前數字最大和模三餘零
dp[i][1]表示nums[0...i]模三餘一的最大和——一狀態:當前數字最大和模三餘一
dp[i][2]表示nums[0...i]模三餘二的最大和——二狀態:當前數字最大和模三餘二
def DPandState(self, nums):
dp = [[0] * 3 for _ in range(len(nums)+1)]
dp[0][1] = -1
dp[0][2] = -1
for i in range(1, len(nums)+1):
if nums[i-1]%3 == 0:
dp[i][0] = max(dp[i-1][0], dp[i-1][0]+nums[i-1])
dp[i][1] = max(dp[i-1][1], dp[i-1][1]+nums[i-1])
dp[i][2] = max(dp[i-1][2], dp[i-1][2]+nums[i-1])
elif nums[i-1]%3 == 1:
dp[i][0] = max(dp[i-1][0], dp[i-1][2]+nums[i-1])
dp[i][1] = max(dp[i-1][1], dp[i-1][0]+nums[i-1])
dp[i][2] = max(dp[i-1][2], dp[i-1][1]+nums[i-1])
elif nums[i-1]%3 == 2:
dp[i][0] = max(dp[i-1][0], dp[i-1][1]+nums[i-1])
dp[i][1] = max(dp[i-1][1], dp[i-1][2]+nums[i-1])
dp[i][2] = max(dp[i-1][2], dp[i-1][0]+nums[i-1])
return dp[len(nums)][0]
相關文章
- LeetCode 2455[可被三整除的偶數平均值]LeetCode
- 整除分塊
- 求子陣列的最大和陣列
- 數論筆記-整除筆記
- 手工實現整除除法的比較
- 【演算法拾遺】三種方法求連續子陣列的最大和演算法陣列
- 介面常量值可被修改
- 連續子陣列的最大和陣列
- 求子陣列的最大和問題陣列
- Risk Based Security三季度漏洞快報:近50%可被遠端利用
- 設計一個函式,傳入一個數字n,若n可以被3整除的返回1,可以被5整除返回2,可以被7整除返回3函式
- 好程式設計師前端教程css中可被繼承和不可被繼承的屬性程式設計師前端CSS繼承
- abc170D 不能整除其他元素的個數
- 數論學習筆記 (1):整除筆記
- 一維子陣列最大和陣列
- 【劍指offer】連續子陣列的最大和陣列
- 開發者最愛的三款開發工具
- jQuery圖片放大和旋轉效果jQuery
- JavaScript設定字型放大和縮小JavaScript
- 生成一段可被外部執行的JS程式碼JS
- JZ-030-連續子陣列的最大和陣列
- 牛客題霸--連續子陣列的最大和陣列
- 每日一練(22):連續子陣列的最大和陣列
- CSS > Flex 佈局中的放大和收縮計算CSSFlex
- Maximum Subarray 連續子陣列最大和陣列
- P2642 雙子序列最大和
- 基礎演算法題——整除光棍(Java大數)演算法Java
- 尤拉函式、整除分塊和擴充套件歐幾里得函式套件
- 劍指 Offer 42.連續子陣列的最大和陣列
- 劍指Offer-連續子陣列中的最大和陣列
- 劍指office--31. 連續子陣列的最大和陣列
- 三個最火的Python Web開發框架PythonWeb框架
- 除錯最長的一幀(第三天)除錯
- 高通晶片關鍵漏洞暴露三星、LG手機上的機密資料,你的密碼可被輕鬆竊取!晶片密碼
- 能被2、3、4、5、6、7、8、9等數整除的數的特徵特徵
- 《劍指Offer》- 連續子陣列的最大和或最小和陣列
- 【leetcode】53. Maximum Subarray 連續子序列的最大和LeetCode
- 劍指offer-例題 連續子陣列的最大和陣列