最近在刷LeetCode的题目,发现利用AI可以加速刷题,非常好用,详细地记录一下心得。
刷题痛点
传统的刷题方式,通常的流程是:
- 找到大神题单、热门题单或者自己按考点分类题单
- 做题,如果实在没有思路就直接看答案;如果有思路且能正常AC,则答案可以不看或者略看
- 直接去面试(完全碰运气和考验记忆力)
但有几个突出的问题点。
1. 标准答案看不懂
每个人的水平都不一样,标准答案通常只会照顾大多数人的水平,因此会产生两个具体的问题:
- 关键步骤完全看不懂,导致整个思路无法看下去
- 虽然能看懂,但理解答案思路需要耗费大量时间,最后得到的成果也只是“看懂这道题”而已,投入和产出悬殊巨大
2. 标准答案记不住
标准答案能看懂,但下次面试又会忘记。类比高考,标准答案能看懂,但下次考到同类题甚至原题,还是会忘记。思考一下高考当时是如何做的:找到核心考点,记住解题套路,并按自己的习惯写出来。但高考考纲是固定的,而且老师/习题会给你准备好考点和解题套路。而LeetCode并不会这样,没有人能帮助你。
AI是如何帮助解决痛点的
1. 快速理解标准答案
举个例子,LeetCode 172. 阶乘后的零
这个题目归类tag为“数学”,要求给定一个整数n ,返回n!结果中尾随零的数量。很明显能想到去统计2和5的数量来实现。但继续深入就不知道如何统计了。
标准答案中,求5的个数,需要计算一下复杂度上界(
标准答案是没有“无穷等比数列求和”的中间几步的,因此开始完全看不懂,而如果想要看懂,还需要去回忆大学的微积分等具体数学知识。答案没有解释,默认大多数人能够看懂这一推理步骤,这就是标准答案的问题所在。而有了AI之后,可以针对不懂的点非常详细地提问,完全个性化,节约了大量时间。真的需要为这道题重新去复习微积分吗?我觉得没有必要,人的精力和时间有限,刷题只是为了找工作而已,而工作也只是人生的一个小部分。为了理解这道题去浪费时间复习,还不如玩一把王者荣耀对自己人生的体验来得更充实。学习不必要学的知识也是一种自杀,AI很好地节约了这部分的时间。
2. 形成自己的解题套路
以1456. 定长子串中元音的最大数目为例,要求返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大英文元音字母数。
这几乎是“滑动窗口”这个考点的入门练习题,题目就差直接给你说考“滑动窗口”了。但滑动窗口有很多解题套路,而且每个人实现滑动窗口都有自己的编码习惯。
我的初步答案是:
java
public int maxVowels(String s, int k) {
// 滑动窗口
int left = 0, right = 0;
Set<Character> vowels = new HashSet<>(Arrays.asList('a','e', 'i', 'o', 'u'));
int count = 0;
while (right - left + 1 <= k && right < k) {
count += vowels.contains(s.charAt(right)) ? 1 : 0;
right++;
}
int max = count;
while (right < s.length()) {
count -= vowels.contains(s.charAt(left)) ? 1 : 0;
left++;
right++;
count += vowels.contains(s.charAt(right - 1)) ? 1 : 0;
max = Math.max(count, max);
}
return max;
}非常丑陋,我自己写第二遍我都写不出一模一样的代码。但我核心是用了“滑动窗口”初步扩充窗口到指定宽度+双指针的套路。
而标准答案是:
java
class Solution {
public int maxVowels(String s, int k) {
int n = s.length();
int vowel_count = 0;
for (int i = 0; i < k; ++i) {
vowel_count += isVowel(s.charAt(i));
}
int ans = vowel_count;
for (int i = k; i < n; ++i) {
vowel_count += isVowel(s.charAt(i)) - isVowel(s.charAt(i - k));
ans = Math.max(ans, vowel_count);
}
return ans;
}
public int isVowel(char ch) {
return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ? 1 : 0;
}
}非常简洁,但单指针控制双边,这是我不熟悉的习惯。
于是喂给AI,很容易得到了结合标准答案、我的风格,且便于记忆的代码。
提示词
相比于标准答案和我的答案,你觉得最适合我的解法是什么?
AI的回答
我完全看懂你的思路了!
你用的是 双指针滑动窗口(left/right),标准答案用的是 单指针滑动窗口(i/i-k)。
我现在给你一个最适合你、最贴合你思路、绝对不越界、逻辑最顺、最好记的版本 ——
不强行改你的风格,只把你代码里别扭、容易错的地方修顺!
先一句话总结:
你的逻辑 完全正确,只是写法 太绕、太容易乱。
最适合你的解法 = 保留你的 left/right 双指针思路 + 去掉多余判断 + 顺序最自然。
你现在代码的 2 个小别扭(不是错,但难写对)
- while (right - left + 1 <= k && right < k)
- 多余、绕、容易写错
- 你先 right++ 再用 right-1
- 虽然没错,但反直觉,很容易晕、越界
最适合你的最终版本(100% 贴合你的思维)
- 保留:left/right 双指针
- 保留:你喜欢的 while 写法
- 保留:你的整体逻辑
- 优化:最自然、最不容易错的顺序
java
public int maxVowels(String s, int k) {
int left = 0, right = 0;
Set<Character> vowels = new HashSet<>(Arrays.asList('a','e','i','o','u'));
int count = 0;
// 第一步:先把窗口变成 k 长度(最清晰)
for (int i = 0; i < k; i++) {
if (vowels.contains(s.charAt(right))) count++;
right++;
}
int max = count;
// 第二步:滑动窗口(最自然的顺序,绝不会越界)
while (right < s.length()) {
// 先加新的
if (vowels.contains(s.charAt(right))) count++;
// 减旧的
if (vowels.contains(s.charAt(left))) count--;
// 指针一起动
right++;
left++;
// 更新最大值
max = Math.max(max, count);
}
return max;
}为什么这个最适合你?
- 完全贴合你的双指针思维(left /right)
- 顺序最自然,永远不会晕
- 没有任何奇技淫巧
- 和标准答案效率完全一样
最适合你的口诀(背下来)
java
先建窗口成 k 长,
加右减左再移动。
指针一起向后走,
不越界来不慌张。需要我把你原来的代码和最适合你的代码逐行对比给你看吗?
AI回答到这里,已经无需多言,和五年高考三年模拟资料书没有差别,甚至更个性化,形成个人风格的同时,又剔除了个人的毛病。
然而现在刷题已经开始落后于时代了
现实世界就是这么残酷运转的:当人们可以借助AI去刷题之后,解题能力就变得不再稀缺,因此面试的重点就开始转移。
举例1:蚂蚁已经开始AI coding笔试了
来自小红书:
蚂蚁ai coding笔试,主要是给你一个README.md的文档,然后让你按照他的需求文档生成代码,操作界面和vscode差不多,右边蚂蚁自带的coding agent(好像是codefuse)。 P2是主播根据原题魔改之后的版本,除了主题换了,排版几乎一模一样。 注意,参加笔试前一定要去网上找提示词!!!
举例2:我们公司已经开始不再使用牛客网考代码了
直接考具体的场景思路,或者“你可以把面试官当作AI使用来提问来实现这个功能“(估计是公司没钱,不能像阿里一样提供vibecoding的服务,只能用这种间接的方式……)
总结
AI很好地解决了“标准答案看不懂”和“标准答案记不住”的问题,形成了个人的解题套路,能够用最短时间从容准备普通面试,但对于新的面试形式仍然需要适应。
也许永远都追不上时代,因为人们永远在追求稀缺的东西。但我是拥抱AI的,因为有了AI之后,我觉得很多脏活累活浪费生命只是为了“筛选”而不是“创造”的事情,都会从我生命里消失——比如面试刷题。
希望正在阅读的你在焦虑AI冲击的同时,也能享受当下生命的美好。




粤公网安备44030002014216号