问题描述
现在有
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"
解题思路
-
理解问题:
- 输入是一个整数列表
nums,表示棋子的序号。 - 我们需要判断是否可以将这些棋子分成若干组,每组恰好包含5个相同序号的棋子。
- 输入是一个整数列表
-
数据结构选择:
- 使用字典(
dict)来统计每个序号的棋子数量。 - 字典的键是棋子的序号,值是该序号的棋子数量。
- 使用字典(
-
算法步骤:
- 遍历
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")
关键步骤解释
-
统计每个序号的棋子数量:
- 使用字典
count_dict来记录每个序号的棋子数量。 - 遍历
nums列表,更新字典中的计数。
- 使用字典
-
检查每个序号的棋子数量是否能被5整除:
- 遍历字典中的值,检查每个值是否能被5整除。
- 如果有一个值不能被5整除,则返回
"False"。 - 如果所有值都能被5整除,则返回
"True"。
总结
这道题目通过一个简单的棋子分组问题,考察了哈希表(字典)的使用、模运算、遍历和条件判断、逻辑思维和问题分解等多个编程和算法相关的知识点。
希望此篇文章对您有所帮助