算法列表

1262. 可被三整除的最大和 中等

布莱克2026-03-16 18:58数组

问题:

给你一个整数数组 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 整除的最大和)。

回答:

var maxSumDivThree = function(nums) {
    //按照%3分别余0,余1,余2创建3个数组
    let mod = [[], [], []];
    let sum = 0;
    for (let i = 0; i < nums.length; i++) {
        mod[nums[i] % 3].push(nums[i]);
        sum = sum + nums[i]
    }
    //余数
    let more = sum % 3;
    if (more == 0) return sum;
    //要减去的值
    let remove = Infinity;
    mod[1] = mod[1].sort((a, b) => a - b);
    mod[2] = mod[2].sort((a, b) => a - b);
    //余1或余2可以减去一个符合的最小的
    if (mod[more].length > 0) {
        remove = mod[more][0]
    }
    //余1可以减去两个余2的值,或者余2减去两个余1的值
    let remain = more == 1 ? 2 : 1;
    if (mod[remain].length > 1) {
        remove = Math.min(remove, mod[remain][0] + mod[remain][1])
    }
    return remove == Infinity ? 0 : sum - remove
};


assistant