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