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

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot中使用Spring Security进行安全控制

我们在编写Web应用时&#xff0c;经常需要对页面做一些安全控制&#xff0c;比如&#xff1a;对于没有访问权限的用户需要转到登录表单页面。要实现访问控制的方法多种多样&#xff0c;可以通过Aop、拦截器实现&#xff0c;也可以通过框架实现&#xff08;如&#xff1a;Apache…

这篇寒门博士论文致谢火了:回首望过去,可怜无数山

源 | 奔流新闻兰州晨报 记者 邢剑扬、安之若素德之至 微信平台、澎湃新闻“可怜无数山”近日&#xff0c;一位甘肃籍博士的论文致谢和回望“火”了&#xff0c;有网友称读后“泪眼婆娑&#xff0c;戳到了灵魂”&#xff0c;也有网友评价“一字一句&#xff0c;熠熠生辉”。“回…

Spring Boot中的事务管理

什么是事务&#xff1f; 我们在开发企业应用时&#xff0c;对于业务人员的一个操作实际是对数据读写的多步操作的结合。由于数据操作在顺序执行的过程中&#xff0c;任何一步操作都有可能发生异常&#xff0c;异常会导致后续操作无法完成&#xff0c;此时由于业务逻辑并未正确…

C++类对象排序operator重载操作

类内默认含有this指针&#xff0c;bool operator(const T& a)类外则需要写两个参数&#xff0c;bool operator(const T& a, const T& b) class People { public:string name;int id;People(string n, int i):name(n),id(i){}bool operator(const People& a){r…

鹅厂计算机视觉,世界第二??

编 | 好困 桃子源 | 新智元腾讯的计算机视觉能力首次进入全球Top2的评分排名&#xff01;Gartner最新发布的2022年度《Magic Quadrant for Cloud AI Developer Services》是业内权威的云计算评估报告之一&#xff0c;评估对象包括亚马逊、微软、谷歌等全球云厂商。在核心产品能…

Spring Boot中使用log4j实现http请求日志入mongodb

之前在《使用AOP统一处理Web请求日志》一文中介绍了如何使用AOP统一记录web请求日志。基本思路是通过aop去切web层的controller实现&#xff0c;获取每个http的内容并通过log4j将日志内容写到应用服务器的文件系统中。 但是当我们在集群中部署应用之后&#xff0c;应用请求的日…

程序员面试金典 - 面试题 01.02. 判定是否互为字符重排(哈希map)

1. 题目 给定两个字符串 s1 和 s2&#xff0c;请编写一个程序&#xff0c;确定其中一个字符串的字符重新排列后&#xff0c;能否变成另一个字符串。 示例 1&#xff1a; 输入: s1 "abc", s2 "bca" 输出: true 示例 2&#xff1a; 输入: s1 "abc&…

破局数据困境,迭代一年的终版解决方案竟是纯规则方法!

文 | Severus大家好&#xff0c;我是Severus&#xff0c;一个致力于做好中文自然语言理解的老程序员。一年前&#xff0c;我在萌屋的第一篇推文&#xff08;在错误的数据上&#xff0c;刷到 SOTA 又有什么意义&#xff1f;&#xff09;中&#xff0c;重点讲述了关系抽取任务所面…

程序员面试金典 - 面试题 01.03. URL化(字符串)

1. 题目 URL化。编写一种方法&#xff0c;将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符&#xff0c;并且知道字符串的“真实”长度。&#xff08;注&#xff1a;用Java实现的话&#xff0c;请使用字符数组实现&#xff0c;以便直接在数组上操作。…

扩散模型又杀疯了!这一次被攻占的领域是...

文 | Yimin_饭煲从2020年的初出茅庐&#xff0c;到2021年的日趋火热&#xff0c;再到2022年的大放异彩&#xff0c;扩散模型(Diffusion Models) 正在人工智能学术界和工业界获取越来越多的关注。如果还不是特别了解扩散模型的朋友&#xff0c;可以阅读卖萌屋的几篇历史推文《扩…

程序员面试金典 - 面试题 01.04. 回文排列(哈希map)

1. 题目 给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。 示例1&#xff1a; 输入&#xff1a;"tactcoa" 输出&#xff1a;tru…

Spring Boot中对log4j进行多环境不同日志级别的控制

之前介绍了在《Spring boot中使用log4j记录日志》&#xff0c;仅通过log4j.properties对日志级别进行控制&#xff0c;对于需要多环境部署的环境不是很方便&#xff0c;可能我们在开发环境大部分模块需要采用DEBUG级别&#xff0c;在测试环境可能需要小部分采用DEBUG级别&#…

耗时四年,我们写了一本1400页的AI全栈技术手册

不知不觉写文章已经四年了。最开始是一个人&#xff0c;后来恰了恰饭&#xff0c;就招揽了很多比小夕厉害的小伙伴一起写。不知不觉已经积累了300多篇了。。三年以来&#xff0c;我跟小伙伴们原创的300篇深度学习、NLP、CV、知识图谱、跨模态等领域的入门资料、子方向综述、201…

程序员面试金典 - 面试题 01.06. 字符串压缩(字符串)

1. 题目 字符串压缩。利用字符重复出现的次数&#xff0c;编写一种方法&#xff0c;实现基本的字符串压缩功能。比如&#xff0c;字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短&#xff0c;则返回原先的字符串。你可以假设字符串中只包含大小写英文字母&…

Spring Boot中使用@Async实现异步调用

什么是“异步调用”&#xff1f; “异步调用”对应的是“同步调用”&#xff0c;同步调用指程序按照定义顺序依次执行&#xff0c;每一行程序都必须等待上一行程序执行完成之后才能执行&#xff1b;异步调用指程序在顺序执行时&#xff0c;不等待异步调用的语句返回结果就执行…

谷歌HuggingFace| 零样本能力最强的语言模型结构

文 | iven从 GPT3 到 Prompt&#xff0c;越来越多人发现大模型在零样本学习&#xff08;zero-shot&#xff09;的设定下有非常好的表现。这都让大家对 AGI 的到来越来越期待。但有一件事让人非常疑惑&#xff1a;19 年 T5 通过“调参”发现&#xff0c;设计预训练模型时&#x…

程序员面试金典 - 面试题 01.07. 旋转矩阵(一次遍历+位运算)

1. 题目 给定一幅由N N矩阵表示的图像&#xff0c;其中每个像素的大小为4字节&#xff0c;编写一种方法&#xff0c;将图像旋转90度。 不占用额外内存空间能否做到&#xff1f; 示例 1: 给定 matrix [[1,2,3],[4,5,6],[7,8,9] ],原地旋转输入矩阵&#xff0c;使其变为: […

Spring Boot中使用@Scheduled创建定时任务

我们在编写Spring Boot应用中经常会遇到这样的场景&#xff0c;比如&#xff1a;我需要定时地发送一些短信、邮件之类的操作&#xff0c;也可能会定时地检查和监控一些标志、参数等。 创建定时任务 在Spring Boot中编写定时任务是非常简单的事&#xff0c;下面通过实例介绍如…

从二本到ICLR杰出论文奖,我用了20年

文 | 李梅编 | 陈彩娴源 | AI科技评论二本出身&#xff0c;读了两个硕士才在29岁开始读博&#xff0c;39岁才结束博士后研究的付杰形容&#xff0c;他的20年就像个体与系统的博弈&#xff1a;一些机器学习的文章中&#xff0c;研究者会根据训练初始阶段 Training Curve&#xf…

Spring Boot属性配置文件详解

相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能&#xff0c;还能实现快速开发的便捷。我们在Spring Boot使用过程中&#xff0c;最直观的感受就是没有了原来自己整合Spring应用时繁多的XML配置内容&#xff0c;替代它的是在pom.xml中引入模块化的Starter PO…