[每日一题]94:可被三整除的最大和

286 阅读1分钟

题目描述

给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。

示例 1:

输入:nums = [3,6,5,1,8]
输出:18
解释:选出数字 3, 6, 18,它们的和是 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]即可。
    }
};