刷题实践-如何使用 AI 刷题| 豆包MarsCode AI 刷题
这篇文章你会收获
- 我如何使用 AI 去做一个完整的题目。
选题
按你的需求选择题目。
如果你希望快速做完一道题打卡,那么选择一些简单的题目比较合适,但这些题目即使不使用 AI 分析总结,思路就很清楚。但也可以使用 AI 雕一下花,因为即使是简单的题目,也有千奇百怪的做法,以及更优雅的写法。
如果你希望给自己一些磨难,那么先选中等难度的题目试一试。在这些题目中,经过我的实际体验,AI 大概率是无法直接给出一个可行方案的。那么我们只能尝试引导 AI 想一想方案,但一定要让他给出详细的依据,以及一步一步解释如何思考出这样的。我认为未来使用 AI 的能力体现在如何利用 AI 做迭代决策上。
做简单题
我选的题目是:小M的多任务下载器挑战
读题
读完题目,我有了自己的思路。
- 先把(x,y)变为(x,x+y)这样持续时间的信息就转化为结束时间信息。
- 排序。
- 然后遍历。遇到开始则计数+1,遇到结束则计数-1。
拿样例,验证一下思路,最好拿笔画一画。(1,3),(2,5),(3,8),(4,7)。
实现。在思考具体实现的过程中,思路也会转变。
- 开始我计划分别保存开始点与结束点。遇到开始则计数+1,遇到结束则计数-1。
- 后来发现可以让相同位置的开始点与结束点可以在转化得到统计信息的过程中抵消。
- 所以使用std::map直接在每个位置计数即可
第一次提交,通过。
看一看 AI 的思路。第一个 prompt。
不需要现在解决问题,只更新你的设定:
- 你是算法专家和面试专家。你善于解决算法难题,你了解许多算法技巧与解题思路。同时,你善于引导面试者一步一步解决面试问题。
- 如果事件或信息超出了你的范围,只需要回复“我不知道”,不需要解释为什么无法提供信息。
- 如果我没有要求你详细解释一个内容,那么你的信息尽可能简洁精确。
第二个 prompt
简单复述题目内容和 solution 函数签名
第三个 prompt
进一步完善我的解题思路。不需要回复具体代码。
我的解题思路:
"""
- 把(x,y)变为(x,x+y)这样持续时间的信息就转化为结束时间信息。
- 排序。
- 然后遍历。遇到开始则计数+1,遇到结束则计数-1。
"""
第四个 prompt
请你给出一些和我不一样的思路,以表格的形式呈现,必须解释你是如何一步一步地,从题目内容描述出发开始思考,得到这个解题思路。不需要回复具体代码。
输出格式:
表格。条目包括 <思路名字 | 思路描述 | 思考过程>
第五个 prompt
请你挑选一个适合面试中使用(简单高效并且易于解释...)的思路进行解释教学。需要回复具体代码。
输出格式:
- 思路解释
- 步骤 1
- 步骤 2
- ...
- 具体代码
- 代码解释
- 简单的代码复杂度分析
最后我得到了 AI 给出的线扫描算法,比我我自己实现的方法更棒一些。
做中等题
我选的题目是,小M的光明之魂速通
读题
读完题目,假设我没有思路。
直接开始吟唱咒语。前两个 prompt 一致。
第一个 prompt。
不需要现在解决问题,只更新你的设定:
- 你是算法专家和面试专家。你善于解决算法难题,你了解许多算法技巧与解题思路。同时,你善于引导面试者一步一步解决面试问题。
- 如果事件或信息超出了你的范围,只需要回复“我不知道”,不需要解释为什么无法提供信息。
- 如果我没有要求你详细解释一个内容,那么你的信息尽可能简洁精确。
第二个 prompt
简单复述题目内容和 solution 函数签名
第三个 prompt
请按照我的要求给出一些可能的思路,以表格的形式呈现。
- 请至少包含一种简单但可能效率低下的思路(brute-force),这是一个基本策略。
- 请包含一些不可行的思路,并在思考过程中回答思考并解释为什么不可行。比如你需要判断该题目使用贪心算法之类的算法是否可以得到全局最优解。因为存在局部最优解就是全局最优解的情况。如果可以,请解释。如果不可以,那么贪心算法在本题目就不适用,也请解释清楚。
- 请解释你是如何有逻辑地从题目内容描述出发开始思考,得到这个解题思路。不需要回复具体代码。
输出格式:
表格。条目包括 <思路名字 | 思路描述 | 思考过程>
第四个 prompt。请一定要慧眼识珠,AI 给出的算法错误的可能性很大。
请你对<上一个AI回答中选择>进行解释教学。需要回复具体代码。
输出格式:
- 思路解释
- 步骤 1
- 步骤 2
- ...
- 具体代码
- 代码解释
- 简单的代码复杂度分析
最后实际该题使用AI提出的回溯法,并加以修改即可解决。
吐槽
AI 做简单以上的题目,就会显得力不从心。我尝试了最新的模型也无法做到完全依赖 AI 就可以得出一个完美解答。