可被三整除的最大和

此博客链接:https://www.cnblogs.com/ping2yingshi/p/14298291.html

可被三整除的最大和

题目链接:https://leetcode-cn.com/problems/greatest-sum-divisible-by-three/submissions/

题目

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

题解

先把数组排序,求数组的和,然后判断和是否能被三整除,如果能被三整除则直接返回,否则的话,把数组中除以3余2的数和除以三余1的数分开存储并且排序,当和除以3余2时,从除以3余2的数组中,找最小的余2的一个数,或者找最小的余1的两个数的和,从总和中减去数组元素除以3余2或者数组中除以3余1的两个数;当和除以3余1时,从除以3余1的数组中,找最小余1的数,或者从数组中找最小的余2的两个数,从总和中减去数组元素除以3余1的一个数或者除以3余2的两个数。

代码

注意:这里需要注意在判断余2和余1中,要判断余2和余1的列表长度,可能构不成余数相加。

class Solution {
    public int maxSumDivThree(int[] nums) {
        if(nums.length==1)
           if(nums[0]%3!=0)
               return 0;
        Arrays.sort(nums);
        int  sum=0;
        int  max=0;
        List <Integer> two=new ArrayList();
        List <Integer> one=new ArrayList();
        int result =0;
        for(int i=0;i<nums.length;i++)
        {
           sum+=nums[i];
           if(nums[i]%3==2)
           {
               two.add(nums[i]);
           }
            if(nums[i]%3==1)
           {
               one.add(nums[i]);
           }
        }
        if(sum%3==0)
           return sum;
        if(sum%3==2)
        {
            if(one.size()>=2)
            {
            if(two.get(0)>one.get(0)+one.get(1))
            {
                result=sum-one.get(0)-one.get(1);
            }
            else
                result=sum-two.get(0);
            }
            else{
                if(two.size()>=1)
                   result=sum-two.get(0);
                else
                   return 0;
            }
                          
        }
        if(sum%3==1)
        {
            if(two.size()>=2)
            {
            if(two.get(0)+two.get(1)>one.get(0))
            {
                result=sum-one.get(0);
            }
            else
                result=sum-two.get(0)-two.get(1);
            }
            else{
                if(one.size()>=1)
                  result=sum-one.get(0);
                else
                return 0;
            }
        }
      return result;
    }
}

 

结果

 

posted @ 2021-01-19 15:38  萍2樱释  阅读(377)  评论(0编辑  收藏  举报