1. 题目

给你一个整数数组 digits,你可以通过按任意顺序连接其中某些数字来形成 3 的倍数,请你返回所能得到的最大的 3 的倍数。

由于答案可能不在整数数据类型范围内,请以字符串形式返回答案。

如果无法得到答案,请返回一个空字符串。

示例 1:
输入:digits = [8,1,9]
输出:"981"示例 2:
输入:digits = [8,6,7,1,0]
输出:"8760"示例 3:
输入:digits = [1]
输出:""示例 4:
输入:digits = [0,0,0,0,0,0]
输出:"0"提示:
1 <= digits.length <= 10^4
0 <= digits[i] <= 9
返回的结果不应包含不必要的前导零。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-multiple-of-three
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

容易错的数据:

[9,8,6,8,6]
[2,2,1,1,1]
[1,1,1,2]
[5,8]

2. 解题

  • 把所有数加起来和为sum,总的字符串降序排序,然后sum%3,看余数
  • 等于0,直接返回
  • 等于1,优先删除1个1 or 4 or 7,没有的话,删除2,5,8中最小的2个
  • 等于2,优先删除1个2 or 5 or 8,没有的话,删除1,4,7中最小的2个
class Solution {public:string largestMultipleOfThree(vector<int>& digits) {int count[10] = {0}, i, sum = 0, time;string ans;    for(i = 0; i < digits.size(); ++i){count[digits[i]]++;//计数sum += digits[i];//总和ans += digits[i]+'0';//字符串}sort(ans.begin(), ans.end(),[](char& a, char& b){return a > b;});if(sum%3 == 1){i = ans.size()-1;if(count[1]!=0||count[4]!=0||count[7]!=0){for( ; i>=0; --i){if(ans[i]=='1'||ans[i]=='4'||ans[i]=='7'){ans.erase(ans.begin()+i);break;}}}else{   time = 2;for( ; i>=0; --i){if(ans[i]=='2'||ans[i]=='5'||ans[i]=='8'){ans.erase(ans.begin()+i);time--;if(time == 0)break;}}}}else if(sum%3 == 2){i = ans.size()-1;if(count[2]!=0||count[5]!=0||count[8]!=0){for( ; i>=0; --i){if(ans[i]=='2'||ans[i]=='5'||ans[i]=='8'){ans.erase(ans.begin()+i);break;}}}else{   time = 2;for( ; i>=0; --i){if(ans[i]=='1'||ans[i]=='4'||ans[i]=='7'){ans.erase(ans.begin()+i);time--;if(time == 0)break;}}}}if(ans != "" && ans[0]=='0')return "0";return ans;}
};

大佬优美解:

class Solution {int cnt[10], sum;string ans = "";set<int> s;int del(int m){for(int i=m;i<=9;i+=3)if(cnt[i]){cnt[i]--;return 1;}return 0;}
public:string largestMultipleOfThree(vector<int>& d) {for(auto x:d)cnt[x]++, sum += x;if(sum%3==1)if(!del(1))del(2),del(2);if(sum%3==2)if(!del(2))del(1),del(1);for(int i=9; i>=0; i--)while(cnt[i]--)ans += i+'0', s.insert(i);if(s.size()==1 && s.count(0))return "0";// [1,0,0] -> "0"return ans;}
};作者:YusenZhang_chatc
链接:https://leetcode-cn.com/problems/largest-multiple-of-three/solution/c-qu-diao-zui-xiao-zhi-8ms-by-yusenzhang_chatc/

LeetCode 1363. 形成三的最大倍数(贪心,难)相关推荐

  1. leetcode 1363 形成三的最大倍数(C++)

    给你一个整数数组 digits,你可以通过按任意顺序连接其中某些数字来形成 3 的倍数,请你返回所能得到的最大的 3 的倍数. 由于答案可能不在整数数据类型范围内,请以字符串形式返回答案. 如果无法得 ...

  2. leetcode No.15-16 三数之和相关问题

    leetcode 15. 三数之和 题目 链接:https://leetcode-cn.com/problems/3sum 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 ...

  3. LeetCode——1737. 满足三条件之一需改变的最少字符数(Change Minimum Characters to Satisfy One of Three...)——分析及代码(Java)

    LeetCode--1737. 满足三条件之一需改变的最少字符数[Change Minimum Characters to Satisfy One of Three Conditions]--分析及代 ...

  4. 小学三年级另类语文题难住大学副教授(图)

    看到这些题蔡先生也犯难 记者 阚旋 摄 小学三年级的语文卷,不仅有你想不到的,也还有你做不到的. 昨日,一套小学生三年级语文作业题,难住了长春某大学副教授蔡先生. 两天答完159个小题 "这 ...

  5. python【力扣LeetCode算法题库】1013-将数组分成和相等的三个部分(贪心)

    将数组分成和相等的三个部分 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] ...

  6. 刻意练习:LeetCode实战 -- Task04. 三数之和

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  7. LeetCode算法题0:分发糖果【贪心算法】

    文章目录 前言 一.题目 二.思路详解 三.搞点实际点儿的(C++实现) 1.略显粗糙的代码实现 2.稍显精致的代码实现 3.最终的代码实现 4.提交结果 总结 前言 本文记录自己在LeetCode上 ...

  8. LeetCode实战:三数之和

    题目英文 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...

  9. 三十六、贪心算法--集合覆盖问题

    一.贪心算法介绍 1.贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 2.贪心算法不是对所有问题都 ...

最新文章

  1. Python之迭代器,生成器与装饰器
  2. 中科大博士20万字正经论文:教你如何给女朋友送礼物
  3. Linux rm过滤后的目录6,Linux的部分命令
  4. gradle groovy_适用于Java开发人员的Groovy吗? 认识Gradle,Grails和Spock
  5. 用servlet进行用户名和密码校验
  6. python线程监控_一日一技:Python多线程的事件监控
  7. 如何修改influxdb表结构_influxdb的基本使用
  8. python中使用动量交易策略
  9. 为Python IDLE 添加清屏(Ctrl + L )快捷工具(附带解决错误的方法)
  10. TiDB分布式数据库培训实战教程(分布式集群架构、分布式大数据平台)
  11. 东芝Toshiba DP-3003 一体机驱动
  12. 怎么在国内创建谷歌账号_如何在Google文档中创建模板
  13. 【转】宁做创业狼,不做打工狗(ZT)
  14. CSS3与页面布局学习总结(四)——页面布局大全
  15. 绝地求生发生错误服务器维护,绝地求生更新时发生错误无法连接服务器解决办法最新版...
  16. ajax四个常用参数,ajax 常用参数
  17. 北京盈创再生资源有限公司研发楼项目智能照明控制系统的设计和应用
  18. 李建忠设计模式之“对象创建”模式
  19. CSS3新增属性汇总
  20. Delphi--Delphi资源

热门文章

  1. HIVE攻略 JFK_Hive安装及使用攻略
  2. 恩智浦智能车大赛2020_内蒙古科技大学第九届智能车大赛校内公开赛总决赛
  3. DataReceivedEventHandler 委托 接收调用执行进程返回数据
  4. *p++,*(p++),(*p)++的区别
  5. postgresql 数据表【转】
  6. sql语句遇到的问题
  7. OpenGL学习笔记-坐标系统
  8. Fantasia (Tarjan+树形DP)
  9. java----IO和NIO的区别
  10. var与dynamic区别