以《数字匹配问题》为例,解析AI刷题功能亮点 | 豆包MarsCode AI刷题

159 阅读4分钟

我将以《数字匹配问题》这道题为例,通过这篇文章来解析豆包MarsCode AI刷题的亮点所在;

题面如下:

image.png

有的同学可能看到题面就有些糊涂了,没太搞明白这道题到底需要干什么,这时候就可以让豆包MarsCode AI出场了,让它帮我们解析一下题意:

image.png

可以看到豆包MarsCode AI分析的非常详细,不仅告诉了我们这道题的关键点,还帮我们把题目示例解释了一遍,个人觉得很多时候读懂一道题目的最快方法就是看题目示例的解释,特别是对于一些题面背景描述特别多的题目,对于题目示例的解释能帮我们跳过这些无关因素直达重点。

现在我们已经理解了题意,但是还是不知道用什么方法解决这道题😢,这时候我们还不想让AI直接给我们实现思路,因为这样我们就没有必要的思考过程,无法有效提升我们的解题能力,所以我只想让AI给我提示一下这道题可以使用什么方法:

image.png

好了,现在我们已经知道可以使用贪心算法实现了,下面就需要我们先自己思考一下,在使用贪心算法的前提下,具体实现步骤是什么样的呢? 如果想出来我们就可以直接实现了,但是可能冥思苦想一番后还是不知道具体怎么实现,这是就可以继续求助AI了:

image.png

好了,具体步骤也有了,下面我们就来具体实现一下吧:

import java.util.*;

public class Main {
    public static int solution(int N, int M, int[] X) {
        Arrays.sort(X);
        int count = 0;
        boolean[] used = new boolean[N];
        for (int i = 0; i < N; i++) {
            if (used[i]) continue;
            for (int j = i + 1; j < N; j++) {
                if (!used[j] && Math.abs(X[j] - X[i]) >= M) {
                    count++;
                    used[i] = true;
                    used[j] = true;
                    break;
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int[] arr1 = {1, 3, 3, 7};
        int[] arr2 = {10, 9, 5, 8, 7};
        int[] arr3 = {2, 4, 6, 8, 10, 12};

        System.out.println(solution(4, 2, arr1) == 2);
        System.out.println(solution(5, 5, arr2) == 1);
        System.out.println(solution(6, 3, arr3) == 3);
    }
}

愉快的实现完了,让我们运行一下吧,点击页面最上方的运行按钮:

image.png

在页面最下方的终端可以看到输出:

image.png

Oooops!😮为什么第三个示例出错了?让我们手动分析一下:对于数组[2,4,6,8,10,12],这个算法会先匹配到{2,6},{4,8},到10和12则无法匹配,只能匹配出2组数字对,而正确的匹配之一是{2,8},{4,10},{6,12},完全可以匹配出3组数字对;看来AI的思路有些问题,那我们把这个情况告诉它,让它据此修改一下自己的实现思路:

image.png

AI给出了修改后的实现步骤,重点在于双指针法中的后一个指针要由数组的中间开始匹配,那我们再次实现:

import java.util.*;

public class Main {
    public static int solution(int N, int M, int[] X) {
        Arrays.sort(X);
        int count = 0;
        int i = 0;
        int j = N / 2;
        while (i < N / 2 && j < N) {
            if (Math.abs(X[j] - X[i]) >= M) {
                count++;
                i++;
                j++;
            } else {
                j++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int[] arr1 = {1, 3, 3, 7};
        int[] arr2 = {10, 9, 5, 8, 7};
        int[] arr3 = {2, 4, 6, 8, 10, 12};

        System.out.println(solution(4, 2, arr1) == 2);
        System.out.println(solution(5, 5, arr2) == 1);
        System.out.println(solution(6, 3, arr3) == 3);
    }
}

先运行一下示例:

image.png

示例运行结果没有问题,点击页面最上方的提交按钮提交:

image.png

通过🤩:

image.png

总结一下,豆包MarsCode AI刷题的亮点所在:

  1. 题意解析:能够帮助用户深入理解题目要求。对于那些背景信息较多或表述较为复杂的题目,豆包MarsCode AI能够提供详细的解析,帮助用户快速抓住题目的核心。

  2. 逐步引导学习:在用户遇到困难时,可以不是直接给出答案,而是通过适当的提示引导用户自己思考解决方案。这种做法有助于培养用户的独立解决问题的能力,避免了过度依赖。

  3. 具体实现指导:如果用户在尝试实施解决方案时遇到了具体的障碍,豆包MarsCode AI能够进一步提供具体的实现步骤,帮助用户克服难关。

  4. 错误修正与反馈:当用户的代码出现错误时,豆包MarsCode AI不仅能指出错误所在,还能提供修改建议。这种即时反馈机制有助于用户及时纠正错误,并在错误中学习。

综上所述,豆包MarsCode AI刷题工具不仅能够有效地帮助用户理解题目、寻找解题思路、实现代码以及修正错误,而且可以在整个过程中培养用户的自主学习能力和解决问题的能力,是一个功能全面且高效的在线学习辅助工具。

好了,那么我们这一次的解析就到这里,后面会给大家展示豆包MarsCode AI刷题的更多功能。