首页 > 其他分享 >1363. 形成三的最大倍数

1363. 形成三的最大倍数

时间:2023-04-10 18:00:52浏览次数:29  
标签:cnt 数字 最大 else del 1363 ans modulu 倍数

题目描述

给一个整数数组
问怎么选数字,可以让能得到的结果最大,同时这个接结果需要是3的倍数?

f1 分类讨论+ 贪心

基本分析

  1. 怎么判断能不能被3整除?和 % 3 == 0
  2. 怎么判断该从数组中删掉哪些数字?(1)和%3==1, 删最小的余1的数字,不行删俩最小的余2的数字;(2)和% 3 == 2,删最小的余2的数字或者俩最小的余1的数字
  3. 怎么构造出ans?从小到大枚举出现过的数字,如果该删就删,否则构造为结果

代码

class Solution:
    def largestMultipleOfThree(self, digits: List[int]) -> str:
        cnt, modulu = [0] * 10, [0] * 3
        s = 0
        for d in digits:
            cnt[d] += 1
            modulu[d % 3] += 1
            s += d
        
        del_d, del_q = 0, 0
        if s % 3 == 1:
            del_d, del_q = (1, 1) if modulu[1] >= 1 else (2, 2)
        if s % 3 == 2:
            del_d, del_q = (2, 1) if modulu[2] >= 1 else (1, 2)
        
        ans = ""
        for i in range(10):
            for j in range(cnt[i]):
                if i % 3 == del_d and del_q > 0:
                    del_q -= 1
                else:
                    ans += str(i)
        
        if len(ans) > 0 and ans[-1] == '0':
            return '0'
        else:
            return ans[::-1]

总结

  1. 根据和的%3的结果分类讨论
  2. 结果需要考虑是"0"的特殊情况

标签:cnt,数字,最大,else,del,1363,ans,modulu,倍数
From: https://www.cnblogs.com/zk-icewall/p/17303777.html

相关文章

  • 【解决】Windows10如何限制CPU最大使用率?
    【问题】Windows10如何限制CPU最大使用率?【解决】:进入控制面板→电源选项→更改计划设置→更改高级电源设置→处理器电源管理,最大处理器状态。设置需要的百分比即可。  ......
  • 用 Go 剑指 Offer 42. 连续子数组的最大和
    输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释: 连续子数组 [4,-1,2,1]的和最大,为 6。 提示:1<= arr.length<=10^5-100<=arr[i]<=100......
  • mysql的主键超过最大值会发生什么?
    设置主键的情况下在自增主键达到int64最大后,再次插入一行记录,报错如下:Duplicateentry‘4294967295’forkey‘increment_id_test.PRIMARY’唯一键冲突报错:当auto_incement达到上限后,再次申请下一个id时,得到的值保持不变。在建表时,通常都会将主键id设置为8字节的bigintu......
  • 二叉树的最大深度,二叉树是否存在路径和为某值的路径
    递归的方法遍历二叉树最大深度:fun(root){if(root==null){ return0;}return(Max(fun(root.left),fun(root.right))+1);}和为某值fun(root,sum){if(root==null){returnfalse;}if(root.left==null&&root.right......
  • 1617. 统计子树中城市之间最大距离
    题目链接:1617.统计子树中城市之间最大距离方法:子集型回溯+判断连通+树的直径解题思路枚举所有可能的子树参考:子集型回溯判断当前的子树是否合法,即当前树是否连通,通过\(dfs\)从某一个节点开始遍历子树,若遍历节点数量不等于子树节点数量,则不连通;计算以每一个子树节点为......
  • 1615. 最大网络秩
    题目链接:1615.最大网络秩方法:暴力求解解题思路初始化每个节点邻接点的数量以及用矩阵保存边的信息,暴力枚举节点对,取其中秩的最大值。代码classSolution{public:intmaximalNetworkRank(intn,vector<vector<int>>&roads){vector<vector<int>>g(n,vect......
  • 1599. 经营摩天轮的最大利润
    题目链接:1599.经营摩天轮的最大利润方法:模拟解题思路模拟全部游客都进行游玩,计算其中能赚取的最大利润值以及对应的次数。代码classSolution{public:intminOperationsMaxProfit(vector<int>&customers,intboardingCost,intrunningCost){intn=customers......
  • 1139. 最大的以 1 为边界的正方形
    题目链接:1139.最大的以1为边界的正方形方法:二维数组前缀和解题思路假设以\((i,j)\)为左上角端点的正方形网格边长为\(d\),则该正方形的四条边\(up、down、left、right\)均为\(d\),两者为充分必要条件。根据二维前缀和运算可得:up=s[i][j+d]-s[i-1][j+d]-s[i......
  • 数量关系和差倍比题目中涉及倍数or百分比的问题
    出现倍数时,记得分清是A比B多n倍A=(n+1)BA是B的n倍A=nB出现百分比,记得1+or1-,否则就是占比倍数题目:百分比题目:......
  • 最小公倍数
    linkcode#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;//注意先除以x后乘以bllgcd(lla,llb){returnb?gcd(b,a%b):a;}intmain(){lla,b;cin>>a>>b;llx=gcd(a,b);cout<<a/x......