难度:简单地给一副纸牌,每张纸牌上都写着一个整数。此时,您需要选择一个数字X,使我们可以根据以下规则将整副牌分成1个或多个组:每组有X张牌。套装中的所有卡片上都写有相同的整数。仅当您的可选X>=2时才返回true。示例:输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是[1,1]、[2,2],[3,3],[4,4]复制代码解不难发现,组中的所有卡片上都写着相同的整数。该组能否成功分组与每个数组出现的次数有关,即每个数字出现的次数是否相同?不是只要有共同点就可以了。比如1有2,2有4,也是可以的。所以问题变成了寻找公约数。求公约数是一道数学题。相信大家都在学校学过减法和除法的方法,也就是所谓的欧氏算法。如何用程序实现呢?一定要记住这个模板。//滚分法privateintgcd(inta,intb){returnb==0?a:gcd(b,a%b);}copycode代码中计数的方法也很值得学习,熟练使用数组下标来计数,比使用Map简单多了。总之,这道题一定要背。Code/**@authoracoding*/classSolution{publicbooleanhasGroupsSizeX(int[]deck){//countint[]counter=newint[10000];for(intnum:deck){counter[num]++;}//找到gcdintx=0;for(intcnt:counter){if(cnt>0){x=gcd(x,cnt);如果(x==1){返回假;}}}returnx>=2;}//privateintgcd(inta,intb){returnb==0?a:gcd(b,a%b);}}最后,如果你觉得这篇文章对你有一点点帮助,那就点个赞吧。或者可以加入我的开发交流群:1025263163互相学习,我们会有专业的技术解答。如果您觉得这篇文章对您有用,请给我们的开源项目一个小星星:http://github。crmeb.net/u/defu非常感谢!PHP学习手册:https://doc.crmeb.com技术交流论坛:https://q.crmeb.com
