豆包MarsCode AI 刷题

144 阅读3分钟

今天开启了刷题的任务,分享一下心得 问题描述 小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" 解题思路

  1. 理解问题: 先需要将 N 个棋子分成 M 组,每组恰好有 5 个棋子,并且每组内的棋子序号必须相同。 -如果可以成功分组,则输出 "True",否则输出 "False"

  2. 数据结构选择: 使用一个 HashMap 来统计每个序号的棋子数量。 HashMap 的键是棋子的序号,值是该序号的棋子数量。

  3. 算法步骤: 遍历棋子数组,统计每个序号的棋子数量。 检查每个序号的棋子数量是否是 5 的倍数。 如果所有序号的棋子数量都是 5 的倍数,则可以成功分组,返回 "True"。 否则,返回 "False"

代码框架

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()) {
            if (count % 5 != 0) {
                return "False";
            }
        }
        
        return "True";
    }

    public static void main(String[] args) {
        // 测试样例
        System.out.println(solution(new int[]{1, 2, 3, 4, 5}).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[]{5, 5, 5, 5, 5, 5, 5, 5, 5, 5}).equals("True"));
        System.out.println(solution(new int[]{7, 7, 7, 8, 8, 8, 8, 8, 7, 7}).equals("True"));
        System.out.println(solution(new int[]{9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}).equals("False"));
    }
}

以下是关键步骤解释

  1. 统计棋子数量: 使用 HashMap 来统计每个序号的棋子数量。 countMap.put(num, countMap.getOrDefault(num, 0) + 1); 这行代码用于更新 HashMap 中每个序号的棋子数量。

  2. 检查分组条件: 遍历 HashMap 中的值,检查每个序号的棋子数量是否是 5 的倍数。 如果有一个序号的棋子数量不是 5 的倍数,则返回 "False"

  3. 返回结果: -如果所有序号的棋子数量都是 5 的倍数,则返回 "True"

最终结果如图

屏幕截图 2024-11-04 081217.png 使用AI刷题是一种结合了现代技术与传统学习方法的新型学习方式 个性化学习方面:AI可以根据你的学习进度和理解能力,提供个性化的学习资源和练习题,让学习更加高效。 即时反馈方面:AI系统能够即时反馈答案的正确与否,以及提供解题思路和解释,这有助于快速识别并纠正错误。学习动力方面:AI刷题可以设置目标和激励机制,比如积分、排行榜等,这有助于提高学习的积极性和动力。