这篇文章给大家分享的是有关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如何实现卡牌分组功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。