Marscode AI刷题使用体验 | 豆包MarsCode AI刷题

177 阅读4分钟

前言

青训营刷题页面右侧内置了豆包MarsCode AI。相比于传统的题目页面,Marscode的引入不仅迎合了当今空前的AI热潮,也为我们编写算法提供了许多便利。本文将以“贪心猫的鱼干大分配”为例,真实展示刷题页面内置AI的使用体验,文末也会进行总结与建议。

贪心猫的鱼干大分配

问题描述

在猫星球上,小R负责给一行排队的猫分发鱼干。每只猫有一个等级,等级越高的猫应该得到更多的鱼干。规则如下:

  1. 每只猫至少得到一斤鱼干。
  2. 如果一只猫的等级高于它相邻的猫,它就应该得到比相邻的猫更多的鱼干。

小R想知道,为了公平地满足所有猫的等级差异,他至少需要准备多少斤鱼干。


测试样例

样例1:

输入:n = 3, cats_levels = [1, 2, 2]
输出:4

样例2:

输入:n = 6, cats_levels = [6, 5, 4, 3, 2, 16]
输出:17

样例3:

输入:n = 20, cats_levels = [1, 2, 2, 3, 3, 20, 1, 2, 3, 3, 2, 1, 5, 6, 6, 5, 5, 7, 7, 4]
输出:35

题目解答

思路分析

这道题理解起来比较容易,我的想法是构造两次循环,先从左到右检查每只猫与左侧那只的等级差异进行分配,然后再从右到左检查每只猫与右侧的等级,两次循环确保按照题目要求成功分配

Python代码

def solution(n, cats_levels):
    fish_amounts = [1] * n
    for i in range(1, n):
        if cats_levels[i] > cats_levels[i - 1]:
            fish_amounts[i] = fish_amounts[i - 1] + 1
    for i in range(n - 2, -1, -1):
        if cats_levels[i] > cats_levels[i + 1]:
            fish_amounts[i] = max(fish_amounts[i], fish_amounts[i + 1] + 1)
    return sum(fish_amounts)

if __name__ == "__main__":
    #  You can add more test cases here
    cats_levels1 = [1, 2, 2]
    cats_levels2 = [6, 5, 4, 3, 2, 16]
    cats_levels3 = [1, 2, 2, 3, 3, 20, 1, 2, 3, 3, 2, 1, 5, 6, 6, 5, 5, 7, 7, 4]
    print(solution(3, cats_levels1) == 4)
    print(solution(6, cats_levels2) == 17)
    print(solution(20, cats_levels3) == 35)

Marscode AI辅助

写完这段代码后,我将代码讲给豆包AI进行检查,以下她的回复:


当然可以帮你检查代码。以下是对你代码的检查和建议:

代码检查

  1. 逻辑正确性

    • 你的代码逻辑是先从左到右遍历,确保每只猫的鱼干数满足其等级高于左边相邻猫的情况。
    • 然后从右到左遍历,确保每只猫的鱼干数满足其等级高于右边相邻猫的情况。
    • 这个逻辑是正确的,能够满足题目要求。
  2. 边界条件

    • 代码中已经考虑了边界条件,即 n = 1 的情况,因为 fish_amounts 初始化为 [1] * n,所以即使 n = 1,也能正确处理。
  3. 代码风格

    • 代码风格良好,注释清晰,变量命名合理。

代码优化建议

  1. 减少重复计算

    • 在第二个 for 循环中,fish_amounts[i] = max(fish_amounts[i], fish_amounts[i + 1] + 1) 这行代码可能会导致一些不必要的重复计算。虽然这不会影响最终结果,但可以考虑优化。
  2. 测试用例

    • 你已经添加了多个测试用例,这很好。确保测试用例覆盖了各种边界情况和常规情况。

从回复中可以看到,豆包详细分析了我的算法思路,总结了三处优点;同时她也指出了优化建议,具体到某一行是否必要。在分析已完成的代码这方面,豆包的发挥比较稳定。

紧接着我又询问豆包是否有更好的算法,她提供了一个代码片段(就不放进文章了),同时讲解了其中的思路。不过就如市面上大多数AI一样,豆包的代码大体实现了题目要求,但在处理边界条件时有所疏忽,需要手动补充。不过这一点可以通过追问的方式解决。

总结

相比于传统的刷题页面,豆包AI的引入无疑降低了用户debug的负担,尤其在出现低级错误时,AI能够更快发现并纠正,大大提高了编程的效率。然而,在创作代码这一点上,AI仍可以进一步提升,灵活性和边界条件的考虑需要更加重视。