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驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    js点击按钮为元素随机字体颜色和背景色
    js随即数字random实现div点击更换背景色
    while循环计算1-100和,1-100内偶数/奇数/被整除的数的和
    慕课手机展示页案例
    第3题:求子数组的最大和
    第4题:在二叉树中找出和为某一值的所有路径
    第5题:查找最小的K个元素
    Linux系统开启IPv6任播(anycast)地址
    第7题:判断两个链表是否相交
    第8题上:思维题
  • 原文地址:https://www.cnblogs.com/itdef/p/11876215.html
Copyright © 2011-2022 走看看