• LeetCode 1262 可被三整除的最大和 Greatest Sum Divisible by Three


    地址 https://leetcode-cn.com/problems/greatest-sum-divisible-by-three/

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

    示例 1:
    
    输入:nums = [3,6,5,1,8]
    输出:18
    解释:选出数字 3, 6, 18,它们的和是 18(可被 3 整除的最大和)。
    示例 2:
    
    输入:nums = [4]
    输出:0
    解释:4 不能被 3 整除,所以无法选出数字,返回 0。
    示例 3:
    
    输入:nums = [1,2,3,4,4]
    输出:12
    解释:选出数字 1, 3, 4 以及 4,它们的和是 12(可被 3 整除的最大和)。
     
    
    提示:
    
    1 <= nums.length <= 4 * 10^4
    1 <= nums[i] <= 10^4

    算法1
    最后数组和 只有三种情况
    1 除以3余0 直接返回
    2 除以3余1 那么要么减少一个除以3余1的数字 或者减少两个除以3余2的数字
    3 除以3余2 那么要么减少一个除以3余2的数字 要么减少两个除以3余1的数字

    class Solution {
    public:
        vector<int> v[3];
    int Check(int singleIdx,int doubleIdx,int sum)
    {
        if (v[doubleIdx].size() < 2) {
                return sum - v[singleIdx][0];
            }
            else if (v[singleIdx].size() == 0) {
                return sum - v[doubleIdx][0] - v[doubleIdx][1];
            }
            else {
                int rem = v[singleIdx][0];
                if (rem > (v[doubleIdx][0] + v[doubleIdx][1]))  rem = (v[doubleIdx][0] + v[doubleIdx][1]);
    
                return sum - rem;
            }
    }
    
    int maxSumDivThree(vector<int>& nums) {
        int sum = 0;
        for (int i = 0; i < nums.size(); i++)
        {
            sum += nums[i];
            if (nums[i] % 3 == 1) {
                v[1].push_back(nums[i]);
            }
            else if(nums[i] % 3 == 2){
                v[2].push_back(nums[i]);
            }
        }
    
        sort(v[1].begin(), v[1].end());
        sort(v[2].begin(), v[2].end());
        int sum_n = sum % 3;
    
        if (sum_n == 0) return sum;
        if (sum_n == 1) {
            //减少两个v2 和一个v1 选择
            return Check( 1, 2,sum);
        }
    
        if(sum_n == 2){
            return Check( 2, 1,sum);
        }
    
        return -1;
    }
    
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    sqlmap注入分类
    sqlmap简单中文说明
    【Python Learning第一篇】Linux命令学习及Vim命令的使用
    模拟退火算法从原理到实战【基础篇】
    平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
    使用VMWareWorkstation10搭建学习环境笔记
    洛谷P1313 计算系数【快速幂+dp】
    浅析Numpy.genfromtxt及File I/O讲解
    持续交付中高效率与高质量
    持续集成CI与自动化测试
  • 原文地址:https://www.cnblogs.com/itdef/p/11876215.html
Copyright © 2020-2023  润新知