AI刷题之纠错 | 豆包MarsCode AI刷题

76 阅读3分钟

在编程学习中,MarsCode AI能作为得力助手,帮助学生更好地理解代码,纠正错误,提升解题能力。本文将通过一道珠子去重题目作为案例,展示如何利用AI在刷题时发现并纠正代码中的错误。

题目背景

我们有一条由 n 颗珠子组成的手链,每颗珠子都有一个对应的颜色编号。小S希望通过去重操作,只保留每种颜色最后出现的那颗珠子,并保持其原始的相对顺序。

题目例子如下:

  • 输入:n = 8, a = [1, 2, 1, 3, 4, 2, 4, 4]
  • 输出:[1, 3, 2, 4]

初始代码

假设我们根据题目的理解,编写了一段初始代码如下:

def remove_duplicates(n, a):
    result = []
    for i in range(n):
        if a[i] not in result:
            result.append(a[i])
    return result

这段代码逻辑看似合理:遍历珠子的数组,每当遇到一个没有出现在结果列表中的颜色编号,就将其添加到结果中。然而,在实际运行后,我们会发现这段代码不能正确处理要求,即仅保留最后一次出现的珠子颜色。举例而言,当输入 [1, 2, 1, 3, 4, 2, 4, 4] 时,结果会输出 [1, 2, 3, 4],而并不是期望的 [1, 3, 2, 4]

MarsCode AI 纠错

我们可以将这段代码交给MarsCode AI进行分析,并询问MarsCode AI出现的问题以及如何改进代码。通过MarsCode AI的智能纠错功能,它能够指出我们忽视了“保留最后一次出现的珠子颜色”的要求。

MarsCode AI改进后的代码

根据AI的反馈,修改后的代码如下:

def remove_duplicates(n, a):
    seen = set()  # 用于存储已经遇到的颜色
    result = []   # 用于存储去重后的珠子
    
    # 从右往左遍历,确保每种颜色的最后一次出现被保留
    for i in range(n-1, -1, -1):
        if a[i] not in seen:
            seen.add(a[i])
            result.append(a[i])
    
    # 结果需要反转,因为是从右往左添加的
    return result[::-1]

测试案例

经过改进后的代码,我们可以验证其正确性:

# 测试样例 1
print(remove_duplicates(8, [1, 2, 1, 3, 4, 2, 4, 4]))  # 输出: [1, 3, 2, 4]

# 测试样例 2
print(remove_duplicates(5, [5, 5, 5, 5, 5]))  # 输出: [5]

# 测试样例 3
print(remove_duplicates(6, [6, 1, 2, 6, 1, 2]))  # 输出: [6, 1, 2]

测试结果表明代码已经可以正确处理珠子去重的问题。

MarsCode AI刷题纠错的优势

通过本次的题目分析,我们可以看出利用MarsCode AI刷题的以下几个优势:

  1. 及时反馈:MarsCode AI能够快速指出代码中的逻辑漏洞或潜在问题,帮助我们避免不必要的调试时间。
  2. 代码优化建议:MarsCode AI不仅可以指出问题,还能给出有效的优化建议,提升代码的效率和可读性。
  3. 帮助理解复杂题目:对于一些复杂的题目,MarsCode AI可以帮助我们梳理解题思路,提供不同的解法,促进对问题本质的深入理解。
  4. 培养问题意识:在使用MarsCode AI纠错的过程中,学生能够逐步培养出自我检查和发现问题的能力,提升编程水平。