学习体验 | 豆包MarsCode AI刷题

51 阅读3分钟

在我学习编程的过程中,AI 刷题功能成为了我不可或缺的伙伴。有一次,我在攻克一道特别棘手的算法题时,遇到了前所未有的挑战。这道题目要求实现一个高效的排序算法,并且要求时间复杂度为 O(n log n)。尽管我尝试了多种方法,但始终无法达到题目要求的效率。

初遇难题

题目描述如下:

复制

给定一个整数数组,要求实现一个排序算法,使得数组中的元素按非递减顺序排列。时间复杂度必须为 O(n log n)。

我尝试了多种排序算法,包括快速排序、归并排序和堆排序,但每次提交代码后,都会因为某些边界情况或性能问题而失败。我感到非常沮丧,甚至开始怀疑自己的编程能力。

AI 的介入

就在我几乎要放弃的时候,我想起了 AI 刷题功能。我决定向 AI 求助,看看它能否给我一些有用的提示或解决方案。我输入了题目描述和我的代码,AI 很快给出了反馈。

AI 首先指出了我代码中的几个问题,包括边界条件处理不当和递归深度过深导致的栈溢出问题。接着,AI 建议我使用归并排序,并给出了一个优化版本的代码示例。

cpp

复制

#include <iostream>
#include <vector>
using namespace std;

void merge(vector<int>& arr, int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;

    vector<int> L(n1), R(n2);

    for (int i = 0; i < n1; i++)
        L[i] = arr[left + i];
    for (int j = 0; j < n2; j++)
        R[j] = arr[mid + 1 + j];

    int i = 0, j = 0, k = left;

    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) {
            arr[k] = L[i];
            i++;
        } else {
            arr[k] = R[j];
            j++;
        }
        k++;
    }

    while (i < n1) {
        arr[k] = L[i];
        i++;
        k++;
    }

    while (j < n2) {
        arr[k] = R[j];
        j++;
        k++;
    }
}

void mergeSort(vector<int>& arr, int left, int right) {
    if (left < right) {
        int mid = left + (right - left) / 2;

        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);

        merge(arr, left, mid, right);
    }
}

int main() {
    vector<int> arr = {38, 27, 43, 3, 9, 82, 10};
    int n = arr.size();

    mergeSort(arr, 0, n - 1);

    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;

    return 0;
}

攻克难题的喜悦

我仔细研究了 AI 提供的代码,发现它在处理边界条件和递归深度方面做得非常出色。我按照 AI 的建议修改了我的代码,并再次提交。这一次,我的代码终于通过了所有的测试用例,并且达到了题目要求的时间复杂度。

当我看到“Accepted”的那一刻,我感到无比的喜悦和成就感。我意识到,AI 不仅是一个工具,更是一个能够帮助我提升编程能力的良师益友。

与同学的竞争与进步

在之后的学习过程中,我与几位同学一起使用 AI 刷题功能进行编程练习。我们互相分享难题和解题思路,互相竞争,看谁能更快地解决难题。这种竞争不仅激发了我们的学习热情,还让我们在编程能力上取得了显著的进步。

有一次,我们遇到了一道特别复杂的动态规划题目。我们各自尝试了多种方法,但都没有找到最优解。最后,我们决定一起向 AI 求助。AI 不仅给出了最优解,还详细解释了每一步的思路和原理。我们通过讨论和实践,最终理解了动态规划的核心思想,并在之后的编程练习中应用得更加得心应手。

结语

通过与 AI 的互动和与同学的竞争,我不仅在编程能力上取得了显著的进步,还体会到了团队合作和共同进步的重要性。AI 刷题功能成为了我们学习编程的得力助手,帮助我们在攻克难题的过程中收获了知识和喜悦。