zoukankan      html  css  js  c++  java
  • 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驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    CodeForces gym Nasta Rabbara lct
    bzoj 4025 二分图 lct
    CodeForces 785E Anton and Permutation
    bzoj 3669 魔法森林
    模板汇总——快读 fread
    bzoj2049 Cave 洞穴勘测 lct
    bzoj 2002 弹飞绵羊 lct裸题
    HDU 6394 Tree 分块 || lct
    HDU 6364 Ringland
    nyoj221_Tree_subsequent_traversal
  • 原文地址:https://www.cnblogs.com/itdef/p/11876215.html
Copyright © 2011-2022 走看看