主题
算法学习专项
归属暑假主线之一;总日程见 个人暑假计划。
本文只管:基础盘点 → C++→JS 迁移 → 一个月怎么刷 → 记录与验收。
学什么、怎么讲:另起零基础教程见算法/(24 篇 · JS 前端面试)。本文配额(A/B/C)与打卡仍可用;专题顺序以教程系列为准。
1. 我的算法基础(现状)
| 项 | 现状 |
|---|---|
| 竞赛 | 蓝桥杯省二(语言:C++) |
| 知识面 | 对一些简单算法有过初步学习(非系统啃完题库) |
| JS | 从未用 JavaScript 写过任何算法题 |
| 本季目标 | 用 JS(建议 TypeScript 亦可) 连续刷约一个月,形成可复述的面试题感 |
怎么解读这段经历
- **省二 + C++**说明:不是零基础;排序、枚举、简单搜索、部分经典模板,大概率「脑子里有印象」。
- 从没写过 JS 算法说明:第一周瓶颈多半是 语法与标准库手感,不是「完全不会想题」。
- 策略:思路可暂时用 C++ 脑内草稿,落笔必须全用 JS——专门练前端岗面试语言。
2. 本季目标(可验收)
| 等级 | 标准 |
|---|---|
| 保底 | 打卡 ≥ 25 天;累计 ≥ 60 题(含温习);全部用 JS 提交 |
| 期望 | 数组~树~回溯/DP 入门各过一轮;中等题能独立讲清思路与边界 |
| 加分 | 每类专题 1 页「套路卡」;能口头对比「这题当年用 C++ 会怎么写」 |
语言约定(建议锁死,少纠结):
- 平台选 JavaScript;若本地 IDE 习惯 TS,可写 TS 再改成可粘贴的 JS。
- 一个月内不以 C++ 交题(回忆用可以,交题不行)。
3. C++ → JS:第一关必过清单
前 2~3 天专门过一遍,边过边写 3~5 道极简练手(两数之和、反转数组等)。
3.1 语法与心智差异
| 能力 | C++ 常见写法 | JS 怎么写 |
|---|---|---|
| 数组 | vector<int> | number[] / Array |
| 长度 | a.size() | a.length |
| 哈希 | unordered_map | Map 或普通对象(键注意转字符串) |
| 集合 | unordered_set | Set |
| 队列 | queue | 用数组 shift/push(注意性能);或手写双指针模拟 |
| 栈 | stack | 数组 push/pop |
| 排序 | sort(a.begin(), a.end()) | a.sort((x, y) => x - y)(默认字典序!) |
| 最大最小 | INT_MAX | Infinity / Number.MAX_SAFE_INTEGER |
| 深拷贝 | 显式拷贝 | 注意引用:[...a]、a.slice() |
| 交换 | swap(a,b) | 解构:[a, b] = [b, a] |
3.2 JS 刷题易踩坑(务必提前知道)
sort不加比较函数会按字符串排:[10, 2].sort()→[10, 2]错位。- 对象当 map 时键全是字符串:数字键要小心;优先
Map。 - 整数除法:
Math.floor(a / b)或a / b | 0(负数时行为不同,优先Math.floor/Math.trunc想清楚)。 - 链表/树结点:平台一般给
function ListNode(val, next);先熟悉构造再写逻辑。 - 大数 / 精度:一般题到
Number.MAX_SAFE_INTEGER够用;溢出题另说。
3.3 建议前 3 天「语法热身」清单
每天 40~60 分钟,只练「会用 JS 表达」:
| Day | 练手 | 刻意用到的 API |
|---|---|---|
| D1 | 两数之和、移除元素 | 数组、双指针、对象/Map |
| D2 | 反转链表、有效括号 | 指针思想、栈(数组) |
| D3 | 二分查找、合并两个有序数组 | Math.floor、边界循环 |
完成热身后,再进入下面四周专题节奏。
4. 一个月刷题路线
4.1 日配额
| 档位 | 配额 | 何时用 |
|---|---|---|
| A | 1 中等 + 1 简单(或 1 中等认真复盘) | 状态正常 |
| B | 2 简单 + 复习 1 旧题 | 出门、烦躁、刚写完 Go |
| C | 1 简单 或 只复盘 1 道旧题 | 仍算打卡 |
固定块:每天同一时段 60~90 分钟新题 + 10~15 分钟复盘。
4.2 四周专题(含「省二存量」对照)
| 周 | 主题 | 重点 | 与蓝桥/C++ 存量的关系 | 产出 |
|---|---|---|---|---|
| W0(2~3 天) | JS 语法热身 | §3.3 | 不追求新算法 | 热身题全 JS AC |
| W1 | 数组 / 双指针 / 滑动窗口 | 两数之和族、去重、最长子串 | 枚举与双指针印象可复用 | 窗口模板卡 |
| W2 | 链表 / 栈 / 队列 | 反转、环、单调栈 | 链表在蓝桥里可能练得少 → 放慢 | 哨兵节点卡 |
| W3 | 二叉树 / DFS·BFS | 层序、路径和、LCA | 搜索思想可迁移;树写法要对齐 JS 结点 | 递归三问卡 |
| W4 | 回溯 / DP 入门 | 子集排列、爬楼梯、01 背包一小截 | 可能只摸过皮 → 以「会定义状态」为目标 | DP 状态定义卡 |
余力:标红题回炉;或图论入门(非必须)。
4.3 平台与跟题方式
- LeetCode,语言锁 JavaScript。
- 跟题二选一:Hot 100 或 按标签,不要两边都追。
- 蓝桥旧题:可当「思路回忆素材」,本月不计入 JS 刷题主进度(除非用 JS 重写并提交到可记录处)。
4.4 单题流程(建议强制)
- 读题 → 自己举例 → 口头说复杂度目标(2~3 分钟)。
- 卡 15~20 分钟仍无方向 → 看标签/提示 → 合上再写。
- 再不会 → 看解,但必须 自己敲一遍 JS,并写一句「C++ 若写会卡在哪 / JS 卡在哪」。
- AC 后补 3 个边界用例。
5. 记录方式
任选其一,坚持比工具重要:
| 字段 | 示例 |
|---|---|
| 日期 | 2026-07-16 |
| 题号 / 标题 | 1. Two Sum |
| 标签 | 哈希 |
| 语言 | JS |
| 自解 / 看解 | 自解 |
| 一句话套路 | 值→下标 Map,扫一遍 |
| C++→JS 备注 | 别用对象数字键 |
本仓库可建 blog/algorithm-notes/ 按周存放;或继续用 Notion。
6. 与暑假总计划的关系
| 文档 | 职责 |
|---|---|
| 个人暑假计划 | 三线时间分配、作息 |
| 本文 | 算法基线、JS 迁移、日配额与打卡验收 |
| 算法教程系列 | 另起的零基础讲法与题单(01~24);内容主路线 |
| 个人基本情况 | 学籍与实习经历 |
时间冲突时:算法打卡优先(总计划里的砍支线规则不变)。
7. 验收清单(一个月结束)
- [ ] 打卡 ____ / ≥25 天
- [ ] 题量 ____ / ≥60(均为 JS)
- [ ] W0 热身完成;W1~W4 至少有 3 张套路卡
- [ ] 能不看稿讲清:双指针、滑窗、链表反转、二叉树递归、回溯框架各一例
- [ ] 诚实回答:「过去蓝桥省二用 C++;本月已能用 JS 稳定写中等入门」
周进度(自填)
| 周次 | 日期 | 题量 | 备注(语言坑 / 题型卡点) |
|---|---|---|---|
| W0 | |||
| W1 | |||
| W2 | |||
| W3 | |||
| W4 |
