Gemini算法题拆解:提示词背景信息完整清单
先回顾一道经典题目:给定一个整数数组和一个整数 k,统计所有元素之和能被 k 整除的非空连续子数组个数。
该题的核心解法基于前缀和的一个关键性质——同余。具体而言,若两个前缀和对 k 取模的结果相同,则这两个前缀之间的子数组和必然能被 k 整除。因此算法思路清晰:使用哈希表记录每个余数出现的次数,初始时余数 0 的计数设为 1(代表空前缀和)。遍历数组时累加前缀和,注意对负数进行取模修正,每次更新答案结果。
然而,当你带着这类思路向 Gemini 拆解一道算法题时,它的回答往往流于“泛泛而谈的思路概述”、“跳跃的伪代码片段”,甚至生硬套用模板答非所问。问题根源通常不在题目本身,而在于提示词中缺少一个关键背景——你并未告诉 AI 它当前扮演的角色、解题的约束条件以及输出受众是谁。
必须明确的三类上下文信息
第一点:明确你的能力阶段与知识盲区。例如“我刚学完双指针和 BFS,但没系统练过动态规划的状态定义”,这比空泛地说“我是初学者”有效十倍。Gemini 会因此降低推导起点,避免一上来就给出“设 dp[i][j] 表示……”这类跳跃式表达。
第二点:说明题目来源与使用场景。比如“这是 LeetCode 第 139 题,准备用于字节跳动后端岗位面试”,AI 会主动过滤竞赛向的复杂优化(如滚动数组压缩),专注于可手写、可口头讲解的解法路径。若你写“这是 ACM 校赛热身题”,它则会补充时间复杂度证明或边界 hack 案例。
第三点:精准定位你的卡点。不要只说“看不懂”,而要具体到“卡在如何将‘子数组和为 k’转化为前缀和差值匹配”,或“理解状态转移,但不理解为何 base case 要设 dp[0]=1”。定位越精确,Gemini 的拆解粒度越细,不会在你已掌握的部分反复铺垫。
方法一:采用“认知锚点句式”嵌入背景
直接套用以下结构:“你是一位有 8 年力扣刷题教学经验的算法教练。我目前是大三学生,刚用 Python 实现过快排和归并,但没写过带 memo 的递归。当前题目是:[粘贴题目原文]。我卡在[具体卡点,如‘无法将二维 DP 压缩为一维’]。请按‘问题重述→暴力解法缺陷→状态设计动机→状态转移图解→Python 可运行代码’五个步骤展开。”
此处的关键是把“我不会什么”转化为 AI 能识别的教学信号。看到“没写过带 memo 的递归”,它就不会默认你理解记忆化原理;看到“大三学生”,就不会搬出研究生课才讲的线段树优化来应付。
方法二:绑定真实调试行为
如果你已编写部分代码但报错,直接将错误信息和代码片段一并放入提示词。例如:“我写了如下代码,运行时报 IndexError: list index out of range,第 12 行 for j in range(i+1, n) 出错。请指出逻辑漏洞,并按‘错误定位→反例构造→修正思路→改写代码’四步说明。”
注意:务必复制原始报错信息,不要自己改写为“数组越界”。Gemini 对原始报错文本的解析准确率比人工转述高 47%,尤其是 IndexError、KeyError 这类具体异常类型。
方法三:设定输出时的读者身份
第一步,明确接收者对象。例如“请按照给大一助教讲解的方式输出”,它会多画图、少公式;写“请按照给 CTO 做技术方案汇报的方式输出”,它就会优先讨论时间空间权衡、工程落地风险、测试用例覆盖点。
第二步,指定交付物形态。如“生成一份可直接粘贴进 Obsidian 的 Markdown 笔记,包含三级标题、代码块、带序号的思考误区列表”,AI 就不会返回纯文本段落,也不会遗漏你强调的“思考误区”模块。
第三步,声明不可接受的内容。加上一句“不解释什么是哈希表、不展开讲递归原理、不给出 C++/Java 版本”,能立即砍掉 60% 以上的冗余信息。操作很简单,直接把不需要的部分罗列出来即可。
