分组飞行棋棋子 | 豆包MarsCode AI刷题

89 阅读2分钟

问题描述

现在有 N 个棋子,每个棋子上有一个数字序号。将这些棋子分成 M 组,每组恰好5个,并且组内棋子的序号相同。小M希望知道是否可以按照这种方式对棋子进行分组。

测试样例

样例1:

输入:nums = [1, 2, 3, 4, 5]
输出:"False"

样例2:

输入:nums = [1, 1, 1, 1, 2, 1, 2, 2, 2, 2]
输出:"True"

样例3:

输入:nums = [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
输出:"True"

解题思路

  1. 理解问题

    • 输入是一个整数列表 nums,表示棋子的序号。
    • 我们需要判断是否可以将这些棋子分成若干组,每组恰好包含5个相同序号的棋子。
  2. 数据结构选择

    • 使用字典(dict)来统计每个序号的棋子数量。
    • 字典的键是棋子的序号,值是该序号的棋子数量。
  3. 算法步骤

    • 遍历 nums 列表,统计每个序号的棋子数量。
    • 检查字典中的每个值,判断是否可以被5整除。
    • 如果所有值都能被5整除,则返回 True,否则返回 False

代码框架

def solution(nums):
    # 统计每个序号的棋子数量
    count_dict = {}
    for num in nums:
        if num in count_dict:
            count_dict[num] += 1
        else:
            count_dict[num] = 1
    
    # 检查每个序号的棋子数量是否能被5整除
    for count in count_dict.values():
        if count % 5 != 0:
            return "False"
    
    return "True"

if __name__ == "__main__":
    # 你可以添加更多测试用例
    print(solution([1, 3, 4, 5, 6, 5, 4]) == "False")
    print(solution([1, 1, 1, 1, 2, 1, 2, 2, 2, 2]) == "True")
    print(solution([11, 45, 49, 37, 45, 38, 3, 47, 35, 49, 26, 16, 24, 4, 45, 39, 28, 26, 14, 22, 4, 49, 18, 4, 4, 26, 47, 14, 1, 21, 9, 26, 17, 12, 44, 28, 24, 24, 10, 31, 33, 32, 23, 41, 41, 19, 17, 24, 28, 46, 28, 4, 18, 23, 48, 45, 7, 21, 12, 40, 2, 19, 19, 28, 32, 6, 27, 43, 6, 18, 8, 27, 9, 6, 6, 31, 37, 15, 26, 20, 43, 3, 14, 40, 20]) == "False")

关键步骤解释

  1. 统计每个序号的棋子数量

    • 使用字典 count_dict 来记录每个序号的棋子数量。
    • 遍历 nums 列表,更新字典中的计数。
  2. 检查每个序号的棋子数量是否能被5整除

    • 遍历字典中的值,检查每个值是否能被5整除。
    • 如果有一个值不能被5整除,则返回 "False"
    • 如果所有值都能被5整除,则返回 "True"

总结

这道题目通过一个简单的棋子分组问题,考察了哈希表(字典)的使用、模运算遍历和条件判断逻辑思维问题分解等多个编程和算法相关的知识点。

希望此篇文章对您有所帮助