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

1262. 可被三整除的最大和

提示

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

思路:

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

方法二:先整体求出所有数的和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]);
        }
    }




    }
};
相关推荐
小爬虫程序猿21 分钟前
如何利用Python解析API返回的数据结构?
数据结构·数据库·python
m0_571957582 小时前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解
pianmian14 小时前
python数据结构基础(7)
数据结构·算法
好奇龙猫6 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20247 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
ChoSeitaku7 小时前
链表交集相关算法题|AB链表公共元素生成链表C|AB链表交集存放于A|连续子序列|相交链表求交点位置(C)
数据结构·考研·链表
偷心编程7 小时前
双向链表专题
数据结构
香菜大丸7 小时前
链表的归并排序
数据结构·算法·链表
jrrz08287 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time8 小时前
golang学习2
算法