卡牌分组

作者: _阿南_ | 来源:发表于2020-03-27 10:30 被阅读0次

    题目:

    给定一副牌,每张牌上都写着一个整数。
    
    此时,你需要选定一个数字 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 <= 10000
    0 <= deck[i] < 10000
    

    题目的理解:

    不看例子还真的不能很好的理解题目:
    (1)X的值意思是,一个组里牌的个数。
    (2)每一个组的数字必须相同。
    (3)先计算deck数组中所有数字的个数并保存到集合D.
    (4)然后从2到D中最小值与D中所有的数字进行取余,如果取余的值为0,那么此X就是有效的。
    (5)复杂度与集合D有关。

    python实现

    from typing import List
    
    
    class Solution:
        def hasGroupsSizeX(self, deck: List[int]) -> bool:
            from collections import Counter
            c = Counter(deck)
            count_set = set()
            for _, value in dict(c).items():
                count_set.add(value)
    
            for value in range(2, min(count_set) + 1):
                result = True
                for count in count_set:
                    if count % value != 0:
                        result = False
                        break
    
                if result:
                    return True
    
            return False
    

    想看最优解法移步此处

    提交

    ok

    发现打卡的题目都有一定的叙述性,并且背后都有一定的数学逻辑,点赞

    // END 今夜风凉,倒春寒,家中静养放疫情

    相关文章

      网友评论

        本文标题:卡牌分组

        本文链接:https://www.haomeiwen.com/subject/fwakuhtx.html