AI究竟会做什么样的算法题 | 豆包MarsCode AI刷题

319 阅读6分钟

AI刷题介绍

豆包 MarsCode AI 刷题平台将代码编辑器和强大的 AI 助力结合在一起,致力于帮助同学们更高效地进行算法题目练习。平台提供了一个在线代码编辑器,用户可以直接在浏览器中编写、运行和调试代码,无需安装任何开发环境。无论是在进行算法题目的练习,还是在解决大厂真题时,都能实时查看代码的运行结果,立即发现问题并改进。

除了便捷的在线编辑和运行功能,MarsCode AI 刷题还搭载了智能 AI 助手,它能够根据用户的代码,给出精准的优化建议、解题思路和错误提示。当你卡在某个题目时,AI 助手可以提供思路指导,帮助你深入理解算法背后的原理,提升解题能力。

通过这种实时交互的学习方式,结合大厂真题和智能化的反馈机制,MarsCode AI 刷题平台让学习算法变得更加高效和有趣,帮助同学们轻松提升刷题能力,迅速掌握算法知识,为未来的面试和编程挑战打下坚实的基础。

AI会做什么样的题目

相信大家都知道GPT-o1这个新推出的模型。

AIME 2024,一个高水平的数学竞赛,GPT4o准确率为13.4%,而这次的o1预览版,是56.7%,还未发布的o1正式版,是83.3%。

代码竞赛,GPT4o准确率为11.0%,o1 预览版为62%,o1正式版,是89%。

博士级科学问题 (GPQA Diamond),GPT4o是56.1,人类专家水平是69.7,o1达到了恐怖的78%

由此可见,模型的能力之间存在着巨大的差别,对于一些困难题(指的是需要思考对应的较难算法,并加以修改能够实现要求的题目,不是题目后面标注的难易度),大部分AI仍然无法给出能够在规定运行时间内的正确解法,甚至一些中等难度的题,AI也无法完全的解答正确。那么目前的这个豆包AI究竟能做什么样子类型的题目呢?

直接说结果:对于模拟题,AI的解答是比较出色的,远远超过其他类型的题目,对于trick或者是一些较难的算法题,AI的结果并不尽如人意。

什么是"模拟题"呢?其实就是编写代码模拟题意输出结果的题,不需要任何的算法等知识,只要能读懂题目,按着题目的步骤编写代码就行。这样一看,这不正是AI所擅长的部分。

举一个简单的例子

题目:蛇形填充n阶方阵

问题描述

小U面临一个有趣的任务:在一个 n×n 的方阵中填入 11 到 n×n 这些数字,并要求按照蛇形顺序从右上角开始,沿着方阵的边界顺时针进行填充。蛇形填充的特殊排列方式使得每一层数字呈现出波浪形的排列方式。

例如,当 n=4n=4 时,方阵应如下所示:

10 11 12  1
9 16 13  2
8 15 14  3
7  6  5  4

你需要编写程序输出填充后的方阵,确保格式的整齐性。

这样的题目就是一个标准的模拟题,AI完成这个题目是非常简单的(当然对于大佬们来说也是很简单的)

看看AI给出的答案:

我们可以按照蛇形填充的规则来逐步填充矩阵。以下是实现代码的思路和代码框架:

解题思路

  1. 初始化矩阵:创建一个 n x n 的矩阵,并初始化为 0
  2. 定义填充方向:我们需要定义四个方向(右、下、左、上),并按照蛇形顺序填充。
  3. 填充数字:从右上角开始,按照定义的方向依次填充数字,直到所有数字都填充完毕。
  4. 处理边界条件:在填充过程中,需要注意矩阵的边界和已经填充过的位置。

代码框架

def solution(n: int) -> list:
    # 初始化矩阵
    matrix = [[0] * n for _ in range(n)]
    
    # 定义方向:右、下、左、上
    directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
    current_direction = 0
    
    # 初始位置
    x, y = 0, n - 1
    
    # 填充数字
    for num in range(1, n * n + 1):
        matrix[x][y] = num
        
        # 计算下一个位置
        next_x = x + directions[current_direction][0]
        next_y = y + directions[current_direction][1]
        
        # 检查是否需要改变方向
        if not (0 <= next_x < n and 0 <= next_y < n and matrix[next_x][next_y] == 0):
            # 改变方向
            current_direction = (current_direction + 1) % 4
            next_x = x + directions[current_direction][0]
            next_y = y + directions[current_direction][1]
        
        # 更新当前位置
        x, y = next_x, next_y
    
    return matrix

if __name__ == '__main__':
    print(solution(4) == [[10, 11, 12, 1], [9, 16, 13, 2], [8, 15, 14, 3], [7, 6, 5, 4]])
    print(solution(5) == [[13, 14, 15, 16, 1], [12, 23, 24, 17, 2], [11, 22, 25, 18, 3], [10, 21, 20, 19, 4], [9, 8, 7, 6, 5]])
    print(solution(3) == [[7, 8, 1], [6, 9, 2], [5, 4, 3]])

代码解释

  1. 初始化矩阵:我们使用列表推导式创建一个 n x n 的矩阵,并初始化为 0
  2. 定义方向:我们使用一个列表 directions 来存储四个方向的偏移量。
  3. 填充数字:我们从右上角开始,按照当前方向填充数字,并在需要时改变方向。
  4. 边界检查:在每次移动时,我们检查下一个位置是否在矩阵范围内且未被填充过。如果需要改变方向,我们更新当前方向并计算新的位置。

你可以根据这个框架继续完善代码,或者直接使用这个实现来解决问题。

提交之后毫无疑问的通过,这样类似的题目其实还有很多很多。

AI辅助练习

如果你想提升自己的编程能力,复杂的模拟题训练是非常重要的一环。通过练习更具挑战性的题目,你可以锻炼自己的问题解决能力,拓宽思维,同时提升编写高质量代码的能力。在这一过程中,AI可以发挥巨大的作用,它不仅能为你提供更为精准的引导和提示,还能帮助你高效地识别问题和优化思路。

补充说明

对于一些简单的算法,比如单调栈、前缀和、简单dp等问题,AI也是能够解答的。多多尝试使用豆包MarsCode AI进行刷题,能够有效提升效率,事半功倍!