题目描述
给你一个整数数组 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
代码示例
class Solution {
public:
int maxSumDivThree(vector<int>& nums) {
vector<int> ans(3, 0);//ans[0],ans[1],ans[2]分别保存遍历过的元素的和中%3==0,%3==1,%3==2的最大值
vector<int> temp(3, 0);
for (auto num : nums) { //遍历nums
for (auto a : ans) { //将ans中每个元素与num求和
if ((num + a) % 3 == 0) temp[0] = max(num + a, temp[0]); //如果当前和 %3==0 且大于之前的temp[0]则更新temp[0]
else if ((num + a) % 3 == 1) temp[1] = max(num + a, temp[1]);//同上
else if ((num + a) % 3 == 2) temp[2] = max(num + a, temp[2]);//同上
}
ans = temp;//将修正过的temp赋给ans
}
return ans[0];//完成遍历返回a[0]即可。
}
};