温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

leecode如何实现卡牌分组功能

发布时间:2021-12-04 15:49:11 来源:亿速云 阅读:133 作者:小新 栏目:大数据

这篇文章给大家分享的是有关leecode如何实现卡牌分组功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。


914. 卡牌分组

https://leetcode-cn.com/problems/x-of-a-kind-in-a-deck-of-cards/


给定一副牌,每张牌上都写着一个整数。

此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:

  • 每组都有 X 张牌。

  • 组内所有的牌上都写着相同的整数。

  • 仅当你可选的 X >= 2 时返回 true。


示例 1:输入:[1,2,3,4,4,3,2,1]输出:true解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]
   
示例 2:输入:[1,1,1,2,2,2,3,3]输出:false解释:没有满足要求的分组。
   
示例 3:输入:[1]输出:false解释:没有满足要求的分组。
   
示例 4:输入:[1,1]输出:true解释:可行的分组是 [1,1]
   
示例 5:输入:[1,1,2,2,2,2]输出:true解释:可行的分组是 [1,1],[2,2],[2,2]
   
提示:1 <= deck.length <= 100000 <= deck[i] < 10000
   

思路:

  • 如果每个元素的次数相等时,满足要求

  • 如果每个元素的次数不相等时,找元素个数的最小公倍数是否存在


  
class Solution:    def hasGroupsSizeX(self, deck: List[int]) -> bool:        if deck is None or len(deck) < 2:            return False        deck_dict = {}  # 用来存放元素及其个数        for i in deck:            deck_dict[i] = deck_dict[i]+1 if i in deck_dict else 1        count = list(deck_dict.values())  # 每个元素的次数列表        min_count = min(count)   # 从中找到最小的元素个数        if len(set(count)) == 1:            return True        else:            for X in range(2, min_count+1):  # 从2开始的公约数,不能是以最小元素个数                succes = 1  # 成功的标志                for c in count:                    if c % X != 0:                        succes = 0                        break                if succes == 1:                    return True            return False
   

感谢各位的阅读!关于“leecode如何实现卡牌分组功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI