青训营X豆包MarsCode 技术训练营笔记(4) | 豆包MarsCode AI刷题

65 阅读5分钟

本次笔记主要介绍豆包MarsCode AI刷题工具的使用。这个工具是在线代码编辑器+AI智能问答服务,极大的提高了写代码的效率。

我们先来看一道例题:

问题描述

小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"

如果对于这道题目没有思路,可以在右侧的AI助手中询问豆包模型:

例如:我可以提问:"给我一些代码提示".

AI会给你一些提示:

好的,让我们来逐步解决这个问题。首先,我们需要理解题目的要求:将棋子分成 M 组,每组恰好5个,并且组内棋子的序号相同。

解题思路

  1. 统计每个序号的棋子数量:我们需要知道每个序号的棋子有多少个。
  2. 检查每个序号的棋子数量是否能被5整除:如果某个序号的棋子数量不能被5整除,那么就无法形成有效的分组。
  3. 判断是否所有序号的棋子都能形成有效的分组:如果所有序号的棋子数量都能被5整除,那么就可以形成有效的分组。

代码提示

我们可以使用一个 HashMap 来统计每个序号的棋子数量,然后检查每个序号的棋子数量是否能被5整除。

接下来AI就会给你代码提示:具体如下:

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"));
    }
}

关键步骤解释

  1. 统计每个序号的棋子数量:使用 HashMap 来存储每个序号的棋子数量。
  2. 检查每个序号的棋子数量是否能被5整除:遍历 HashMap 中的值,检查每个值是否能被5整除。
  3. 返回结果:如果所有序号的棋子数量都能被5整除,返回 "True",否则返回 "False"

你可以根据这个提示继续完善你的代码。如果有任何问题,欢迎继续提问!

以上就是用豆包AI大模型的使用情况,当然如果代码有错误或者有不理解的地方,还是可以继续提问。比如我可以这么问:

countMap.getOrDefault(num, 0)是什么用法?

豆包AI是这么回答的: countMap.getOrDefault(num, 0) 是 Java 中 HashMap 类的一个方法,用于获取指定键 num 对应的值。如果 num 在 HashMap 中不存在,则返回一个默认值 0

详细解释

  • getOrDefault(K key, V defaultValue)

    • key:要查找的键。
    • defaultValue:如果键 key 不存在时返回的默认值。

用法示例

假设我们有一个 HashMap 用于存储学生的分数:

import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> scores = new HashMap<>();
        
        // 添加一些学生的分数
        scores.put("Alice", 95);
        scores.put("Bob", 88);
        
        // 获取 Alice 的分数,如果不存在则返回 0
        int aliceScore = scores.getOrDefault("Alice", 0);
        System.out.println("Alice's score: " + aliceScore); // 输出: Alice's score: 95
        
        // 获取 Charlie 的分数,如果不存在则返回 0
        int charlieScore = scores.getOrDefault("Charlie", 0);
        System.out.println("Charlie's score: " + charlieScore); // 输出: Charlie's score: 0
    }
}

在你的代码中的应用

在你的代码中,countMap.getOrDefault(num, 0) 用于统计每个序号的棋子数量。具体来说:


for (int num : nums) {
    countMap.put(num, countMap.getOrDefault(num, 0) + 1);
}
  • countMap.getOrDefault(num, 0):获取当前序号 num 的棋子数量,如果 num 不存在则返回 0
  • countMap.put(num, countMap.getOrDefault(num, 0) + 1):将当前序号 num 的棋子数量加 1,并更新到 HashMap 中。

总结

countMap.getOrDefault(num, 0) 是一个非常方便的方法,用于在 HashMap 中查找键值,并在键不存在时提供一个默认值。在你的代码中,它帮助你统计每个序号的棋子数量,而不需要手动检查键是否存在。

希望这个解释对你有帮助!如果有其他问题,欢迎继续提问。

以上就是我对AI的提问,豆包模型也是快准的回答了我都问题。总而言之,如今的AI时代,我们需要拥抱AI聊天机器人,可以帮助我们提高效率。