Skip to content

利用AI加速LeetCode刷题

最近在刷LeetCode的题目,发现利用AI可以加速刷题,非常好用,详细地记录一下心得。

刷题痛点

传统的刷题方式,通常的流程是:

  • 找到大神题单、热门题单或者自己按考点分类题单
  • 做题,如果实在没有思路就直接看答案;如果有思路且能正常AC,则答案可以不看或者略看
  • 直接去面试(完全碰运气和考验记忆力)

但有几个突出的问题点。

1. 标准答案看不懂

每个人的水平都不一样,标准答案通常只会照顾大多数人的水平,因此会产生两个具体的问题:

  • 关键步骤完全看不懂,导致整个思路无法看下去
  • 虽然能看懂,但理解答案思路需要耗费大量时间,最后得到的成果也只是“看懂这道题”而已,投入和产出悬殊巨大

2. 标准答案记不住

标准答案能看懂,但下次面试又会忘记。类比高考,标准答案能看懂,但下次考到同类题甚至原题,还是会忘记。思考一下高考当时是如何做的:找到核心考点,记住解题套路,并按自己的习惯写出来。但高考考纲是固定的,而且老师/习题会给你准备好考点和解题套路。而LeetCode并不会这样,没有人能帮助你。

AI是如何帮助解决痛点的

1. 快速理解标准答案

举个例子,LeetCode 172. 阶乘后的零

这个题目归类tag为“数学”,要求给定一个整数n ,返回n!结果中尾随零的数量。很明显能想到去统计2和5的数量来实现。但继续深入就不知道如何统计了。

标准答案中,求5的个数,需要计算一下复杂度上界(p=5):

k=1n5k<k=1n5k=nk=1(15)k=na1=15q=15<1=na11q=n15115=n1545=n4=O(n)

标准答案是没有“无穷等比数列求和”的中间几步的,因此开始完全看不懂,而如果想要看懂,还需要去回忆大学的微积分等具体数学知识。答案没有解释,默认大多数人能够看懂这一推理步骤,这就是标准答案的问题所在。而有了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是主播根据原题魔改之后的版本,除了主题换了,排版几乎一模一样。 注意,参加笔试前一定要去网上找提示词!!! ai_coding_readme.jpg

举例2:我们公司已经开始不再使用牛客网考代码了

直接考具体的场景思路,或者“你可以把面试官当作AI使用来提问来实现这个功能“(估计是公司没钱,不能像阿里一样提供vibecoding的服务,只能用这种间接的方式……)

总结

AI很好地解决了“标准答案看不懂”和“标准答案记不住”的问题,形成了个人的解题套路,能够用最短时间从容准备普通面试,但对于新的面试形式仍然需要适应。

也许永远都追不上时代,因为人们永远在追求稀缺的东西。但我是拥抱AI的,因为有了AI之后,我觉得很多脏活累活浪费生命只是为了“筛选”而不是“创造”的事情,都会从我生命里消失——比如面试刷题。

希望正在阅读的你在焦虑AI冲击的同时,也能享受当下生命的美好。

转载请注明出处https://bananaoven.com/articles/58735.html | 香蕉微波炉
分享许可方式知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
重大发现:转载注明原文网址的同学刚买了彩票就中奖,刚写完代码就跑通,刚转身就遇到了真爱。