2023-06-19 LeetCode每日一题(可被三整除的最大和)

2023-06-19每日一题

一、题目编号

1262. 可被三整除的最大和

二、题目链接

点击跳转到题目位置

三、题目描述

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

提示:

  • 1 <= nums.length <= 4 * 10^4
  • 1 <= nums[i] <= 10^4

四、解题代码

class Solution {
public:
    int maxSumDivThree(vector<int>& nums) {
        vector<int> a;
        vector<int> b;
        vector<int> c;
        for(int i = 0; i < nums.size(); ++i){
            if(nums[i]%3 == 0){
                a.push_back(nums[i]);
            } else if(nums[i]%3 == 1){
                b.push_back(nums[i]);
            } else{
                c.push_back(nums[i]);
            }
        }
        sort(a.begin(), a.end());
        sort(b.begin(), b.end());
        sort(c.begin(), c.end());
        int sum = 0;
        for(int i = 0; i < nums.size(); ++i){
            sum += nums[i];
        }
        if(sum%3 == 0){
            return sum;
        } else if(sum%3 == 1){
            if(b.size() == 0){
                if(c.size() < 2){
                    return 0;
                } else{
                    return sum-c[0]-c[1];
                } 
            } else{
                if(c.size() < 2){
                    return sum-b[0];
                } else{
                    return sum-min(c[0]+c[1], b[0]);
                }
            }
        } else{
            if(c.size() == 0){
                if(b.size() < 2){
                    return 0;
                } else{
                    return sum-b[0]-b[1];
                }
            } else{
                if(b.size() < 2){
                    return sum-c[0];
                } else{
                    return sum-min(c[0], b[0]+b[1]);
                }
            }
        }
    return sum;
    }
};

五、解题思路

(1) 首先所需要做的事情,就是创立三个数组a、b、c。
下面说明三个数组的用处。

  • a数组负责存储除以3余数为0的数字
  • b数组负责存储除以3余数为1的数字
  • c数组负责存储除以3余数为2的数字

(2) 然后将a、b、c三个数组进行排序

(3) 之后进行分类讨论。先求出数组中所有元素的和。
<1> 如果和可以被3整除,那么可以直接返回结果。
<2> 否则话,如果差1的话,那么先试探是否有余数为1的,或者有两个余数2的。然后取最小值。
<3> 否则的话,如果差2的话,那么先试探是否有两个余数为1的,或者是否有一个余数为2的。

(4) 最终减去返回结果即可。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)