給你乙個整數陣列 nums,請你找出並返回能被三整除的元素最大和。
示例 1:
輸入:nums = [3,6,5,1,8]
輸出:18
解釋:選出數字 3, 6, 1 和 8,它們的和是 18(可被 3 整除的最大和)。
示例 2:
輸入:nums = [4]
輸出:0
解釋:4 不能被 3 整除,所以無法選出數字,返回 0。
示例 3:
輸入:nums = [1,2,3,4,4]
輸出:12
解釋:選出數字 1, 3, 4 以及 4,它們的和是 12(可被 3 整除的最大和)。
1 <= nums.length <= 4 * 10^4
1 <= nums[i] <= 10^4
這道題第一反應是貪心,但是我貪了半天才發現策略不對,而且複雜度還很高,因為只要貪就得排序,排序就是o(nlogn),而dp卻只用o(n),題解也有貪的,但是我沒看。
這道題只是在以往的基礎上變了一丟丟我就不會了。我把這道題和全部子串聯絡在了一起,全部子串主要考慮的是要不要前乙個數,而3的餘數的話,這個數就不知道怎麼處理了。其實就變了一點點。我只要拿三個數分別儲存每種餘數的情況下最大的和就可以了。例如乙個3個元素的陣列,分別代表餘數為0、1和2的數字。最後如果新的結果大於原有的資料就更新。
這裡我又遇到了乙個很sb的問題,陣列初始化是3個0,陣列中第0個數是0沒錯,0%3=0,但是第1個數也是0,餘數不是1,啊。差不多的問題,如果我上來給了10個9,9的餘數都是0,就是說這些數都只能放在餘數為0的那個陣列了嗎?拿結果肯定不對啊。後來我明白了,其實並不用管這個數是從餘數為幾的來的,只需要管這個數的結果就好。比如一組數是272,dp的初始值是000,第一輪過後結果肯定是002,第二輪的時候先算0+7=7,7的餘數是1,所以放在dp[1],2+7=9,放在dp[0],第二輪結束就是9,7,2。第三輪就是9,7,11。
leetcode已證
int maxsumdivthree(vector& nums)
ans = temp;
} return ans[0];
}
1262 可被三整除的最大和
給你乙個整數陣列 nums,請你找出並返回能被三整除的元素最大和。示例 1 輸入 nums 3,6,5,1,8 輸出 18 解釋 選出數字 3,6,1 和 8,它們的和是 18 可被 3 整除的最大和 示例 2 輸入 nums 4 輸出 0 解釋 4 不能被 3 整除,所以無法選出數字,返回 0。示...
可被三整除的最大和
可被三整除的最大和 給你乙個整數陣列nums,請你找出並返回能被三整除的元素最大和。示例 1 輸入 nums 3,6,5,1,8 輸出 18解釋 選出數字 3,6,1 和 8,它們的和是 18 可被 3 整除的最大和 示例 2 輸入 nums 4 輸出 0解釋 4 不能被 3 整除,所以無法選出數字...
1262 可被三整除的最大和 貪心 動態規劃
給你乙個整數陣列 nums,請你找出並返回能被三整除的元素最大和。示例 1 輸入 nums 3,6,5,1,8 輸出 18 解釋 選出數字 3,6,1 和 8,它們的和是 18 可被 3 整除的最大和 示例 2 輸入 nums 4 輸出 0 解釋 4 不能被 3 整除,所以無法選出數字,返回 0。示...