1363. 形成三的最大倍数

题目描述

给一个整数数组
问怎么选数字,可以让能得到的结果最大,同时这个接结果需要是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"的特殊情况
posted @   zhangk1988  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示