力扣(可被三整除的最大和)

1262. 可被三整除的最大和

提示

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

思路:

方法一:利用一个长度为3的数组,分别保存0到i内余数为0,1,2的最大和,这样对于一个进入的数k,依次更新数组每一个元素,最后dp0就是所要求的结果.

方法二:先整体求出所有数的和sum,然后判断宿命对3的余数,如果是0,则直接返回。若是1,则结果可能是sum减去一个余数是1的元素,或者sum减去两个余数是二的元素。若是2,则结果可能是sum减去一个余数是2的元素,或者sum减去两个余数是一的元素。

复制代码
class Solution {
public:
    int maxSumDivThree(vector<int>& nums) {
    //    vector<int>dp(3,0);
    //    //和余是0,1,2

    //    for(int i=0;i<nums.size();i++)
    //    {
    //       int ret=nums[i]%3;
    //       vector<int>dp1(dp.begin(),dp.end());
    //    //和余是0,1,2
    //       if(dp[ret]==0)
    //          {
    //             dp1[ret]=nums[i];
    //          }
    //       for(int k=0;k<3;k++)
    //       {
             
    //          {
    //             if(dp[k]!=0)
    //             {
    //                 //非零才能用来更新
    //                 dp1[(k+ret)%3]=max(dp[(k+ret)%3],dp[k]+nums[i]);
    //             }
    //          }
    //       }
    //         dp=dp1;
    //    }
    //    return dp[0];    

  const int cc=0x3f3f3f3f;
    vector<int>dp(3,cc);
     vector<int>dp1(3,cc);
         int sum=0;
    for(auto e:nums)
    {   
        sum+=e;
        int ret=e%3;
       if(dp[ret]>e)
       {
        dp1[ret]=dp[ret];
         dp[ret]=e;
         
       }
       else
       {
         dp1[ret]=min(dp1[ret],e);
       }
    }  

  

    if(sum%3==0)
    {
        return sum;
    }
    else if(sum%3==1)
    {
        if(dp[1]==cc&&dp1[2]==cc)
        {
            return 0;
        }
        else{
            return max(sum-dp[1],sum-dp[2]-dp1[2]);
        }
    }
    else
    {
         if(dp[2]==cc&&dp1[1]==cc)
        {
            return 0;
        }
        else{
            return max(sum-dp[2],sum-dp[1]-dp1[1]);
        }
    }




    }
};
相关推荐
徐小夕4 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
可编程芯片开发5 小时前
UPFC统一潮流控制器的simulink建模与仿真
算法
小小仙子6 小时前
矢量网络分析仪如何测试S参数的?
人工智能·算法·机器学习
code bean7 小时前
【C#】 `Channel<T>` 深度解析:生产者-消费者模式的现代解法
数据结构·c#
中微极客8 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
storyseek8 小时前
前缀和实现Kogge-Stone算法
数据结构·算法
元Y亨H8 小时前
开发者必须掌握的十大核心算法
算法
元Y亨H8 小时前
深度解构:数据结构与算法的理论基石与工程演进
数据结构·算法
元Y亨H9 小时前
数据结构与算法的通俗指南
数据结构·算法