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

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]);
        }
    }




    }
};
相关推荐
小O的算法实验室5 分钟前
2025年CMAME SCI2区,基于优先级驱动搜索、具备动态候选解管理策略的粒子群算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
吃着火锅x唱着歌9 分钟前
LeetCode 2874.有序三元组中的最大值II
数据结构·算法·leetcode
xxxxxmy19 分钟前
相向双指针—三数之和
python·算法·相向双指针
Blossom.11820 分钟前
基于知识图谱+LLM的工业设备故障诊断:从SQL日志到可解释推理的实战闭环
人工智能·python·sql·深度学习·算法·transformer·知识图谱
conkl24 分钟前
梅森旋转算法深度解析:构建更健壮的前端请求体系
前端·算法·状态模式
老黄编程34 分钟前
点云NARF关键点原理、算法描述及参数详细描述
算法·点云·narf特征点
CoovallyAIHub40 分钟前
NeurIPS 2025时间检验奖:10年之后再谈Faster R-CNN
深度学习·算法·计算机视觉
CoovallyAIHub1 小时前
1024层网络让强化学习性能飙升50倍,NeurIPS 2025最佳论文揭示深度scaling的力量
深度学习·算法·计算机视觉
adfass1 小时前
桌面挂件时钟/多功能时钟C++
开发语言·c++·算法