问题描述
小M和小F在玩飞行棋。游戏结束后,他们需要将桌上的飞行棋棋子分组整理好。现在有 N 个棋子,每个棋子上有一个数字序号。小M的目标是将这些棋子分成 M 组,每组恰好5个,并且组内棋子的序号相同。小M希望知道是否可以按照这种方式对棋子进行分组。
例如,假设棋子序号为 [1, 2, 3, 4, 5],虽然只有5个棋子,但由于序号不同,因此不能形成有效的分组。如果序号是 [1, 1, 1, 1, 1, 2, 2, 2, 2, 2],则可以形成两个有效分组,因此输出为 True。
测试样例
样例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"
样例4:
输入:
nums = [7, 7, 7, 8, 8, 8, 8, 8, 7, 7]
输出:"True"
样例5:
输入:
nums = [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
输出:"False"
让我们来拆解分析该问题。首先,我们需要理解题目的要求:将棋子分成 M 组,每组恰好5个,并且组内棋子的序号相同。
形成解题思路
- 统计每个序号的棋子数量:我们需要知道每个序号的棋子有多少个。
- 检查每个序号的棋子数量是否能被5整除:如果某个序号的棋子数量不能被5整除,那么就无法形成有效的分组。
- 判断是否所有序号的棋子都能形成有效的分组:如果所有序号的棋子数量都能被5整除,那么就可以形成有效的分组。
代码提示
为了解决该问题,很明显存在着键与值的对应问题,那就可以考虑使用map类来进行解决。我们可以使用一个 HashMap 来统计每个序号的棋子数量,然后遍历这个 HashMap 来检查每个序号的棋子数量是否能被5整除。
在此给出代码如下:
import java.util.HashMap;
public class Main {
public static String solution(int[] nums) {
// 创建一个HashMap来统计每个序号的棋子数量
HashMap<Integer, Integer> countMap = new HashMap<>();
// 统计每个序号的棋子数量
for (int num : nums) {
countMap.put(num, countMap.getOrDefault(num, 0) + 1);
}
// 检查每个序号的棋子数量是否能被5整除
for (int count : countMap.values()) {
// 如果某个序号的棋子数量不能被5整除,返回"False"
if (count % 5 != 0) {
return "False";
}
}
// 如果所有序号的棋子数量都能被5整除,返回"True"
return "True";
}
public static void main(String[] args) {
// 你可以添加更多测试用例
System.out.println(solution(new int[]{1, 3, 4, 5, 6, 5, 4}).equals("False"));
System.out.println(solution(new int[]{1, 1, 1, 1, 2, 1, 2, 2, 2, 2}).equals("True"));
System.out.println(solution(new int[]{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}).equals("False"));
}
}
关键步骤解释
- 统计每个序号的棋子数量:使用
HashMap来存储每个序号的棋子数量。 - 检查每个序号的棋子数量是否能被5整除:遍历
HashMap中的值,检查每个值是否能被5整除。 - 返回结果:如果所有序号的棋子数量都能被5整除,返回
"True",否则返回"False"。
到此,本题解答完毕。
本题运用map类的子类hashmap类,便于初学者熟悉并上手该类,理解该类的基本性质和相关题目的解题思路。