zoukankan      html  css  js  c++  java
  • 可被三整除的最大和

    此博客链接: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;
        }
    }

    结果

    出来混总是要还的
  • 相关阅读:
    selenium+python+API分类总结
    Web自动化测试之六、Selenium Web控件交互
    五、Selenium元素定位的八种方法
    五、X-PATH定位元素
    五、css_selector定位总结
    pytest测试框架实战一
    python实战2
    pycharm 远程开发
    python 虚拟环境
    爬虫案例_网易云歌单
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14298291.html
Copyright © 2011-2022 走看看