leetcode:914. 卡牌分组(数学)
程序员文章站
2022-06-07 11:43:10
...
题目:
分析:
代码标记的很清楚了
代码:
sort(v.begin(),v.end());
//查找有没有单个出现的数
if(v[0]!=v[1]) return 0;
if(v[v.size()-1]!=v[v.size()-2]) return 0;
for(int i=1;i<v.size()-1;i++)
{
if(v[i]!=v[i-1]&&v[i]!=v[i+1]) return 0;
}
int all=1;
vector<int> v2;
//统计每个数出现的个数: 每个数都至少出现了两次了
for(int i=1;i<v.size();i++)
{
if(v[i]==v[i-1]) all++;
else{
v2.push_back(all);
all=1;
}
}
v2.push_back(all);
sort(v2.begin(),v2.end());
if(v2.size()==1) return 1;
//寻找任意两个数的最大公因数。
for(int i=0;i<v2.size()-1;i++)
{
for(int j=i+1;j<v2.size();j++)
{
if(gcd(v2[i],v2[j])==1) return 0;
}
}
cout<<1;