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
- 整除分塊
- 整除的尾數 hd 2099
- 好程式設計師前端教程css中可被繼承和不可被繼承的屬性程式設計師前端CSS繼承
- 數論筆記-整除筆記
- 連續子陣列的最大和陣列
- Risk Based Security三季度漏洞快報:近50%可被遠端利用
- 設計一個函式,傳入一個數字n,若n可以被3整除的返回1,可以被5整除返回2,可以被7整除返回3函式
- abc170D 不能整除其他元素的個數
- JZ-030-連續子陣列的最大和陣列
- 數論學習筆記 (1):整除筆記
- L1-046 整除光棍 (20分)
- 滿足條件的數累加被17整除的數的累加
- P2642 雙子序列最大和
- 【leetcode】53. Maximum Subarray 連續子序列的最大和LeetCode
- 每日一練(22):連續子陣列的最大和陣列
- 牛客題霸--連續子陣列的最大和陣列
- 三個最火的Python Web開發框架PythonWeb框架
- 劍指office--31. 連續子陣列的最大和陣列
- 劍指Offer-連續子陣列中的最大和陣列
- 劍指 Offer 42.連續子陣列的最大和陣列
- 高通晶片關鍵漏洞暴露三星、LG手機上的機密資料,你的密碼可被輕鬆竊取!晶片密碼
- 《擴大和升級資訊消費三年行動計劃(2018-2020年)》解讀
- awk判斷整除(包含小數和負數)
- 除錯最長的一幀(第三天)除錯
- 滑鼠懸浮從中心放大和縮小的半透明遮罩層遮罩
- 劍指offer-例題 連續子陣列的最大和陣列
- 《劍指Offer》- 連續子陣列的最大和或最小和陣列
- Java中使用流Stream查詢列表中的最大和最小日期Java
- 基礎演算法題——整除光棍(Java大數)演算法Java
- 過早的給方法中 引用物件 設為 null 可被 GC提前回收嗎?物件NullGC
- 能被2、3、4、5、6、7、8、9等數整除的數的特徵特徵
- Android之監聽View的兩個指頭是放大和縮小AndroidView
- [每日一題] 第十五題:連續子陣列的最大和每日一題陣列
- 程式設計求一維陣列中最大和最小的元素值程式設計陣列
- 第五章:整除性與最大公因數(1)
- 第五章:整除性與最大公因數(2)
- 蘋果的上位史證明, Waymo無人車可被創業公司碾壓蘋果創業