题目描述
自己解法
遍历数组计数,求出最小牌数,根据最小牌数求出它的所有因数,再遍历检查即可
class Solution:
def hasGroupsSizeX(self, deck: List[int]) -> bool:
card_count = dict()
factor = []
for card in deck:
if card in card_count:
card_count[card] += 1
else:
card_count[card] = 1
min_card = min(card_count.values())
if min_card < 2:
return False
for i in range(2,int(min_card ** 0.5 + 1)):
if min_card % i == 0:
factor.append(i)
if i != min_card ** 0.5:
factor.append(min_card/i)
factor.append(min_card)
for fct in factor:
Found = True
for val in card_count.values():
if val % fct != 0:
Found = False
if Found:
return True
return False
时间复杂度
O
(
n
)
O(n)
O(n)
空间复杂度
O
(
n
)
O(n)
O(n)
官方解答
求出最大公约数,再判断是否大于2即可,具体参考:官方解答。
class Solution(object):
def hasGroupsSizeX(self, deck):
from fractions import gcd
vals = collections.Counter(deck).values()
return reduce(gcd, vals) >= 2