经过连续两周的刷题实践,我希望通过这篇文章深入剖析 AI 刷题的几个亮点功能,并通过一道中级难度题目的刷题实践分享我的ai刷题使用过程。
豆包MarsCode AI刷题功能简介
针对刷题这一编程学习的刚需场景,豆包MarsCode 凭借其强大的 AI 能力,提供了从读题、解题到诊断错误的支持。AI 不仅能根据你的能力水平和练习进度推荐合适的题目,还能在解题过程中提供算法与实现思路的引导,确保每一次练习都能带来实质性的提升。不同于传统的 AI 助手,豆包MarsCode 不会直接给出答案,而是陪伴你一步步理解知识的玄妙。当代码运行出错时,AI 还能迅速定位问题,并给出详细解析,帮助你快速掌握正确的解题思路和方法。
优势特点
- 智能题目推荐:AI刷题平台能够根据用户的历史做题记录和表现,智能推荐符合其当前水平的题目。这种个性化推荐机制确保每个用户都能找到适合自己的挑战,不仅能够激发学习兴趣,避免因题目过难或过易而产生的挫败感,还能够帮助学习者系统化地积累知识,逐步提升编程能力。
- 即时反馈与解析:每次完成题目后,AI刷题平台会提供详细的解析和相关知识点的链接,帮助学习者查漏补缺。如果答案错误,平台还会给出具体的错误原因和改进建议,这种即时反馈和解析功能帮助学习者及时发现并纠正错误,避免了传统学习中的盲目性和低效性。
- 多样化的题目类型:AI刷题平台提供多种类型的题目,包括但不限于数据结构、算法、系统设计、网络协议等。这些题目不仅涵盖了基础知识点,还包括一些高级话题和实际应用场景,帮助学习者全面掌握不同领域的知识,提高综合解题能力。 ,确保用户始终保持在“挑战区”内,既不会因题目过于简单而感到无聊,也不会因题目过于困难而感到沮丧。
- 云端编辑器:AI刷题平台提供的云端编辑器具有即时运行与反馈、多语言支持和交互式学习等特点,大大提高了编码效率。
- 高效问题拆解与代码优化:AI刷题功能会根据题目描述帮助用户拆解问题,并提供智能提示功能,帮助用户优化代码。
豆包MarsCode AI刷题实践
问题描述
小U得到一个只包含小写字母的字符串 S。她可以执行如下操作:每次选择字符串中两个相同的字符删除,然后在字符串末尾添加一个任意的小写字母。小U想知道,最少需要多少次操作才能使得字符串中的所有字母都不相同?
测试样例
样例1:
输入:
S = "abab"
输出:2
样例2:
输入:
S = "aaaa"
输出:2
样例3:
输入:
S = "abcabc"
输出:3
刷题页面由3个部分组成,最左栏为问题,中间为云端编辑器,可以即时运行与反馈;右侧为豆包MarsCode Ai助手,预设了思路提示、代码提示、检查代码三个提示词。
1.以思路提示为例
提问后,Ai提供了解题思路,并提供了 如何计算每个字符需要的最少操作次数 这一进一步思考的问题引导。以下是Ai的思路提示。
问题理解
给定一个只包含小写字母的字符串 S,我们需要通过一系列操作使得字符串中的所有字母都不相同。每次操作可以选择字符串中两个相同的字符删除,然后在字符串末尾添加一个任意的小写字母。
数据结构选择
我们可以使用一个字典来统计每个字符的出现次数。这样可以帮助我们快速知道每个字符出现的频率。
算法步骤
- 统计字符频率:遍历字符串
S,统计每个字符的出现次数,并存储在字典char_count中。 - 计算操作次数:对于每个字符,如果它的出现次数大于1,我们需要计算将其变为唯一字符所需的操作次数。具体来说,如果一个字符出现
count次,需要count - 1次操作。 - 累加操作次数:将所有字符的操作次数累加起来,得到最终的最少操作次数。
关键点
- 对于每个字符,如果它出现
count次,需要count - 1次操作来使其变为唯一字符。 - 累加所有字符的操作次数即可得到最终答案。
希望这些思路能帮助你更好地理解问题并编写代码。如果你有任何具体的问题或需要进一步的提示,请随时告诉我!
2.以代码提示为例
提问后,MarsCode Ai提供了包含代码思路在内的代码解题框架。
将代码插入编辑器,运行后可以即时看到输出。
3.以检查代码为例
此时提交解答会面临解答错误的提示,此时利用ai检查编辑区代码
MarsCode AI有时会出现检查不出错误原因的情况。面对这样的情况可以自己检查代码情况,或借助其他ai进行解题。
4.提交正确代码并对比出错原因
正确解答代码
def solution(S):
from collections import Counter
# 统计每个字符出现的次数
char_count = Counter(S)
# 需要的操作次数
operations = 0
# 额外添加的字符数
additional_chars = 0
for count in char_count.values():
# 如果字符出现次数大于1,计算需要消除的对数
if count > 1:
operations += (count - 1) // 2
additional_chars += (count - 1) % 2
# 需要的操作次数等于消除对数加上额外添加的字符数
return operations + additional_chars
# 测试样例
print(solution("abab")) # 输出:2
print(solution("aaaa")) # 输出:2
print(solution("abcabc")) # 输出:3
豆包ai解答代码
def solution(S: str) -> int:
# 1. 统计每个字符的出现次数
char_count = {}
for char in S:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
# 2. 计算需要的最少操作次数
operations = 0
for count in char_count.values():
if count > 1:
# 隐藏关键步骤:计算当前字符需要多少次操作
# 提示:如果一个字符出现 `count` 次,需要 `count - 1` 次操作
# 请在这里填写代码
operations += count - 1 # 计算并累加操作次数
return operations
# 测试样例
print(solution("abab")) # 输出:2
print(solution("aaaa")) # 输出:2
print(solution("abcabc")) # 输出:3
主要区别:
-
操作次数计算:
- 正确解答代码:计算操作次数时,考虑了每次操作可以删除两个相同的字符。因此,对于每个字符出现次数
count大于1的情况,计算需要的操作次数为(count - 1) // 2(整除),并且记录剩余的单个字符数量(count - 1) % 2。 - 豆包ai代码:直接计算
count - 1作为操作次数,没有考虑每次操作可以删除两个相同的字符。
- 正确解答代码:计算操作次数时,考虑了每次操作可以删除两个相同的字符。因此,对于每个字符出现次数
-
额外字符的处理:
- 正确解答代码:在计算操作次数时,考虑了剩余的单个字符需要额外添加一个字符来满足条件,这部分额外字符的数量为
additional_chars。 - 豆包ai代码:没有考虑额外字符的处理。
- 正确解答代码:在计算操作次数时,考虑了剩余的单个字符需要额外添加一个字符来满足条件,这部分额外字符的数量为
结论:
豆包ai代码没有正确处理每次操作可以删除两个相同的字符的情况,也没有考虑额外字符的处理。因此,提供的代码可能无法正确计算最少需要的操作次数。
总结
通过以上的步骤,我完成了一次有效的ai刷题实践,既利用ai功能引导了思路的梳理以及代码框架的建立,也通过自己的思考完善了代码的不足并总结原因。