跳到正文
XiaoGao 的个人博客

NO.04 · 数据结构与算法

LeetCode 面试经典 150 题:按专题推进的 C++ 题解

按专题组织的 LeetCode 面试经典 150 题 C++ 题解——先完成数组与字符串 24 题,再推进双指针与滑动窗口,用「一个专题一组模板」的方式积累,而不是按题号散着刷。

发布 DATE
字数 WORDS
772
阅读 READ
2 分钟

刷题最大的浪费不是不会做,而是做完就忘。按题号散着刷,每道题都是一个孤立事件;按专题成组地刷,一组题共用一套模板——记住一组,就记住了一类。

这个仓库就是按这个思路组织的:面试经典150题/C++/ 下按专题分目录,题解从数组与字符串开始,一组一组往下推进。

目录组织方式

1
2
3
4
面试经典150题/C++/
├── 01_数组-字符串/ 24 题
├── 02_双指针/ 5 题
└── 03_滑动窗口/ 3 题

文件名形如 001_88.合并两个有序数组.cpp:序号 + LeetCode 题号 + 题名。序号只表示在当前专题内的推进顺序,与难度无关;题号保证任何一个文件都能立刻对应回 LeetCode 原题。

目前的进度

专题 题数 代表题
数组-字符串 24 88 合并两个有序数组、26/80 删除重复项、121/122 买卖股票、55/45 跳跃游戏、42 接雨水、12/13 罗马数字互转、151 反转字符串中的单词
双指针 5 125 验证回文串、392 判断子序列、167 两数之和 Ⅱ、11 盛最多水的容器、15 三数之和
滑动窗口 3 209 长度最小的子数组、3 无重复字符的最长子串、30 串联所有单词的子串

为什么按专题推进

数组-字符串是专题的起点:一是题目基数最大(面试经典 150 题里占四分之一),二是它是双指针、滑动窗口、前缀和等技巧的「地基」。24 道题刷下来,反复出现的模式很清晰——

  • 原地修改类(27 移除元素、26/80 删除重复项):快慢指针一个模板通吃,80 题只是多记一个计数;
  • 递推类(121/122 买卖股票、55/45 跳跃游戏):I 与 II 之间只差一个状态定义;
  • 双端推进类(42 接雨水):左右指针从两端向中间走,维护两侧最大值。

双指针专题则是一条递进链:125 验证回文串是单串相向而行;167 两数之和 Ⅱ 把相向双指针用到「有序数组找目标」;11 盛最多水的容器引入「移动较短边」的贪心依据;15 三数之和 = 排序 + 固定一个 + 167 的模板复用。五道题其实是同一套指针移动逻辑的不同外衣。

滑动窗口是三题定式:209 是「窗口和 ≥ target 的最短长度」,3 是「无重复字符的最长窗口」,30 是「定长窗口 + 哈希计数」。固定右端、收缩左端的骨架在三题里完全一致,差异只在窗口合法性的判定条件。

一个值得记住的细节

文件名里的连续序号不只是排序,它记录了当时的推进路径。回头看目录,等于看到自己每个专题的思考顺序——哪个专题卡得久、哪类题重复出现,一目了然。

仓库

    ↑↓ 选择↵ 打开>theme · >random · >top · >archive