刷题实践 | 豆包MarsCode AI 刷题

55 阅读4分钟

一、AI 刷题的优势

  1. 即时反馈与纠错
    AI 能够迅速对编写的代码给出反馈,指出代码中存在的语法错误、逻辑错误等问题。当我们在刷题过程中尝试用 C++ 解决各种算法问题或者程序设计题目时,比如实现一个排序算法或者查找算法,一旦代码出现语法上的小失误,像遗漏分号、括号不匹配等情况,AI 可以马上精准地指出具体位置以及错误类型,帮助我们快速修正,避免在一个简单错误上浪费大量时间去排查。
  2. 提供多种解题思路
    对于一道程序设计题目,往往有多种解法。AI 可以基于自身丰富的知识储备,展示不同的算法思路来用 C++ 解决问题。例如,在解决数组求和问题时,它既可以提供常规的循环遍历累加的方法,也可以给出利用 STL(标准模板库)中的算法函数(如 std::accumulate)来简洁实现的思路,拓宽我们的思维方式,让我们从多角度去理解和攻克题目,学习到更多高效的编程技巧和优化策略。
  3. 知识点讲解与拓展
    在刷题过程中,AI 不仅仅能帮我们解决当前这道题,还能对题目涉及到的 C++ 相关知识点进行深入讲解和拓展。如果题目涉及到了指针、引用这些较难理解的概念,AI 可以详细地解释它们的原理、使用场景、容易出现的错误等内容,并且还能列举更多与之相关的实际案例,帮助我们巩固和深化对这些关键知识点的掌握,构建起更完整的知识体系。
  4. 模拟面试场景
    很多时候刷题是为了应对面试等场景,AI 可以模拟面试的问答环境,针对我们用 C++ 写的代码进行提问,例如询问代码的时间复杂度、空间复杂度如何优化,或者让我们解释某段关键代码的作用等,锻炼我们的口头表达能力和临场应变能力,提前适应面试的节奏和压力。
  5. 个性化学习建议
    根据我们刷题的历史记录、经常出错的知识点类型以及解题的熟练程度等情况,AI 能够给出个性化的学习建议。比如,如果发现我们在 C++ 的类和对象相关题目上正确率较低,就会推荐一些针对性的练习题、学习资料,引导我们进行专项提升,让学习更有针对性和高效性。

二、C++ 实践案例分析

以经典的 “二叉树的层序遍历” 题目为例,来看 AI 如何在刷题过程中发挥优势帮助学习。

  1. 题目描述
    给定一个二叉树的根节点 root,要求实现函数来按层序遍历这棵二叉树,并返回每层节点值的列表(使用 C++ 语言)。
  2. 初次代码尝试及 AI 反馈
    我们可能首先会写出如下代码
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

// 定义二叉树节点结构体
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

vector<vector<int>> levelOrder(TreeNode* root) {
    vector<vector<int>> result;
    if (root == NULL) return result;
    queue<TreeNode*> q;
    q.push(root);
    while (!q.empty()) {
        int size = q.size();
        vector<int> level;
        for (int i = 0; i < size; ++i) {
            TreeNode* node = q.front();
            q.pop();
            level.push_back(node->val);
            if (node->left) q.push(node->left);
            if (node->right) q.push(node->right);
        }
        result.push_back(level);
    }
    return result;
}

将这段代码提交给 AI 后,AI 首先会检查语法方面,确认没有问题后,会分析逻辑。它指出代码整体思路是正确的,利用队列先进先出的特性实现了层序遍历,不过它还给出了优化建议,比如可以考虑使用智能指针(std::shared_ptr 和 std::unique_ptr)来管理二叉树节点的内存,避免手动管理内存时可能出现的内存泄漏风险,这就帮助我们从代码规范和内存管理的角度进一步完善代码。

AI 详细解释了这种递归方法的原理,通过记录节点所在的深度,将节点值放入对应深度的列表中,递归地遍历整棵树来完成层序遍历。对比两种思路,我们可以深入理解队列和递归这两种不同的编程技巧在处理树结构数据时的应用特点,拓宽了我们解决此类问题的思维方式。