LeetCode #914. X of a Kind in a Deck of Cards

题目

914. X of a Kind in a Deck of Cards


解题方法

根据题意可以转化问题为:分别统计所有数出现的频数,再求这些频数的最大公约数,如果不是1就返回True,否则False。所以先用字典统计次数,再用欧几里得算法计算最大公约数,用Python的reduce()函数对所有频数进行依次计算。
时间复杂度:O(N·logN·logN)
空间复杂度:O(N)
这里的N为卡片的种数。


代码

class Solution:
    def gcd(self, x, y):
        while y:
            x, y = y, x % y
        return x
    
    def hasGroupsSizeX(self, deck: List[int]) -> bool:
        dic = {}
        for x in deck:
            if x in dic:
                dic[x] += 1
            else:
                dic[x] = 1
        return reduce(gcd, dic.values()) >= 2
posted @ 2020-11-23 08:46  老鼠司令  阅读(74)  评论(0)    收藏  举报