AI刷题实践| 豆包MarsCode AI刷题

264 阅读7分钟

经过连续两周的刷题实践,我希望通过这篇文章深入剖析 AI 刷题的几个亮点功能,并通过一道中级难度题目的刷题实践分享我的ai刷题使用过程。

豆包MarsCode AI刷题功能简介

针对刷题这一编程学习的刚需场景,豆包MarsCode 凭借其强大的 AI 能力,提供了从读题、解题到诊断错误的支持。AI 不仅能根据你的能力水平和练习进度推荐合适的题目,还能在解题过程中提供算法与实现思路的引导,确保每一次练习都能带来实质性的提升。不同于传统的 AI 助手,豆包MarsCode 不会直接给出答案,而是陪伴你一步步理解知识的玄妙。当代码运行出错时,AI 还能迅速定位问题,并给出详细解析,帮助你快速掌握正确的解题思路和方法。

优势特点

  1. 智能题目推荐:AI刷题平台能够根据用户的历史做题记录和表现,智能推荐符合其当前水平的题目。这种个性化推荐机制确保每个用户都能找到适合自己的挑战,不仅能够激发学习兴趣,避免因题目过难或过易而产生的挫败感,还能够帮助学习者系统化地积累知识,逐步提升编程能力。
  2. 即时反馈与解析:每次完成题目后,AI刷题平台会提供详细的解析和相关知识点的链接,帮助学习者查漏补缺。如果答案错误,平台还会给出具体的错误原因和改进建议,这种即时反馈和解析功能帮助学习者及时发现并纠正错误,避免了传统学习中的盲目性和低效性。
  3. 多样化的题目类型:AI刷题平台提供多种类型的题目,包括但不限于数据结构、算法、系统设计、网络协议等。这些题目不仅涵盖了基础知识点,还包括一些高级话题和实际应用场景,帮助学习者全面掌握不同领域的知识,提高综合解题能力。 ,确保用户始终保持在“挑战区”内,既不会因题目过于简单而感到无聊,也不会因题目过于困难而感到沮丧。
  4. 云端编辑器:AI刷题平台提供的云端编辑器具有即时运行与反馈、多语言支持和交互式学习等特点,大大提高了编码效率。
  5. 高效问题拆解与代码优化:AI刷题功能会根据题目描述帮助用户拆解问题,并提供智能提示功能,帮助用户优化代码。

豆包MarsCode AI刷题实践

问题描述

小U得到一个只包含小写字母的字符串 S。她可以执行如下操作:每次选择字符串中两个相同的字符删除,然后在字符串末尾添加一个任意的小写字母。小U想知道,最少需要多少次操作才能使得字符串中的所有字母都不相同?


测试样例

样例1:

输入:S = "abab"
输出:2

样例2:

输入:S = "aaaa"
输出:2

样例3:

输入:S = "abcabc"
输出:3

image.png

刷题页面由3个部分组成,最左栏为问题,中间为云端编辑器,可以即时运行与反馈;右侧为豆包MarsCode Ai助手,预设了思路提示代码提示检查代码三个提示词。

1.以思路提示为例

image.png 提问后,Ai提供了解题思路,并提供了 如何计算每个字符需要的最少操作次数 这一进一步思考的问题引导。以下是Ai的思路提示。

问题理解

给定一个只包含小写字母的字符串 S,我们需要通过一系列操作使得字符串中的所有字母都不相同。每次操作可以选择字符串中两个相同的字符删除,然后在字符串末尾添加一个任意的小写字母。

数据结构选择

我们可以使用一个字典来统计每个字符的出现次数。这样可以帮助我们快速知道每个字符出现的频率。

算法步骤

  1. 统计字符频率:遍历字符串 S,统计每个字符的出现次数,并存储在字典 char_count 中。
  2. 计算操作次数:对于每个字符,如果它的出现次数大于1,我们需要计算将其变为唯一字符所需的操作次数。具体来说,如果一个字符出现 count 次,需要 count - 1 次操作。
  3. 累加操作次数:将所有字符的操作次数累加起来,得到最终的最少操作次数。

关键点

  • 对于每个字符,如果它出现 count 次,需要 count - 1 次操作来使其变为唯一字符。
  • 累加所有字符的操作次数即可得到最终答案。

希望这些思路能帮助你更好地理解问题并编写代码。如果你有任何具体的问题或需要进一步的提示,请随时告诉我!

2.以代码提示为例

image.png 提问后,MarsCode Ai提供了包含代码思路在内的代码解题框架。

image.png 将代码插入编辑器,运行后可以即时看到输出。

3.以检查代码为例

此时提交解答会面临解答错误的提示,此时利用ai检查编辑区代码

image.png

image.png

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

主要区别:

  1. 操作次数计算

    • 正确解答代码:计算操作次数时,考虑了每次操作可以删除两个相同的字符。因此,对于每个字符出现次数count大于1的情况,计算需要的操作次数为(count - 1) // 2(整除),并且记录剩余的单个字符数量(count - 1) % 2
    • 豆包ai代码:直接计算count - 1作为操作次数,没有考虑每次操作可以删除两个相同的字符。
  2. 额外字符的处理

    • 正确解答代码:在计算操作次数时,考虑了剩余的单个字符需要额外添加一个字符来满足条件,这部分额外字符的数量为additional_chars
    • 豆包ai代码:没有考虑额外字符的处理。

结论:

豆包ai代码没有正确处理每次操作可以删除两个相同的字符的情况,也没有考虑额外字符的处理。因此,提供的代码可能无法正确计算最少需要的操作次数。

总结

通过以上的步骤,我完成了一次有效的ai刷题实践,既利用ai功能引导了思路的梳理以及代码框架的建立,也通过自己的思考完善了代码的不足并总结原因。