原题链接:6071. 完成所有任务需要的最少轮数
自己写的代码(我都不忍心看。。。写的又慢又丑):
class Solution {
public:
int minimumRounds(vector<int>& tasks) {
sort(tasks.begin(),tasks.end());
int n=0, res=0;
for(int i=0;i<tasks.size();i++)
{
n++;
if((i+1<tasks.size() && tasks[i]!=tasks[i+1]) || i==tasks.size()-1)
{
while(n)
{
if(n%3==0)
{
res+=n/3;
n=0;
}
if(n>4)
{
n-=3;
res++;
}
if(n>=2)
{
n-=2;
res++;
}
if(n==1)
return -1;
}
}
}
return res;
}
};
参考周赛大佬提交的代码(写的真漂亮):
class Solution {
public:
int minimumRounds(vector<int>& tasks) {
map<int,int> cnt;
for(auto x:tasks) cnt[x]++;
int res=0;
for(auto it=cnt.begin();it!=cnt.end();it++)
{
int x=it->second;
if(x==1) return -1;
else if(x==2) res++;
else if(x%3==0) res+=x/3;
else res+=x/3+1;
}
return res;
}
};