# leetcode-150 **Repository Path**: myparadises/leetcode-150 ## Basic Information - **Project Name**: leetcode-150 - **Description**: 4 年 Java 后端转型 AI 工程师的学习记录。目标:掌握大模型微调、RAG、Agent 开发,冲击 35K。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 0 - **Created**: 2025-11-08 - **Last Updated**: 2026-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: 算法, Python, 面试 ## README # LeetCode 150 题精刷计划 💡 > 为冲击 AI/后端高薪岗位(目标 35K+),系统性刷完 LeetCode 精选 150 题,作为**个人能力成长记录**。 > 每题均包含:Python 实现、详细思路、复杂度分析、关键技巧总结(如双指针、滑动窗口、前缀和、二分模板等)。 ## 🎯 目标 - 掌握高频面试题核心套路 - 提升代码质量与边界处理能力 - 构建可复用的算法思维框架 ## 📂 项目结构 ```text basic_alg/ ├── divide/ # 分治路线(11月17日添加) ├── backtrack/ # 回溯路线(11月18日添加) ├── dp/ # dp路线(11月20日添加) │ ├── sorting/ # 排序算法实现 │ ├── advanced/ # 高级排序:堆排、归并、快排 │ ├── basic/ # 基础排序:冒泡、插入、选择 │ ├── linear/ # 线性时间排序:桶排序 │ └── tests/ #测试模块 │ ├── searching/ # 查找算法 │ └── binary_search.py │ ├── structs/ # 数据结构实现 │ ├── tree/ # 树相关:二叉树、BST、AVL等(持续补充) │ │ └── binary_tree.py │ ├── tests/ # 所有数据结构的单元测试 │ └── 数据结构具体实现 │ ├── note/ # 解题笔记、模板、易错点总结(待填充) │ └── 目前是类型题目归纳总结 │ ├── solution/ # LeetCode 题解(按模块分类,规划中) └── README.md # 项目说明 ``` ## 📅 每日提交记录(个人日志) - **2025-11-8** - ✅ 完成链表、栈、堆、哈希表结构的实现、并完成相关测试案例编写 - **2025-11-9** - ✅ 完成树结构的实现、并完成相关测试案例编写 - **2025-11-10---(总进度:10道)** - ✅ 完成链表(10道算法)`solutions/08_linkedlist`---涉及基础操作、反转变换类、双指针技巧类、复杂结构类 - **2025-11-11---(总进度:10道)** - ✅ 完成前一日链表的算法更新,更新为更适合题型思路的方法,优化相关复杂度 - ✅ `basic_alg\`完成六大排序算法和二分查找算法的实现 - 📝 编写 `notes/08_linkedlist_note.md`对链表算法流程梳理 - **2025-11-12---(总进度:23道)** - ✅ 完成二叉搜索树的实现、及相关测试案例 - ✅ 完成二叉树系列代码刷题(13道算法题)`solutions/_09_binary_tree` 二叉树基础操作,`solutions/_10` 全部(层次遍历) - **2025-11-13---(总进度:32道)** - ✅ 收官二叉树全部题型 - 💡 今日问题: 对于两个序列遍历确定树结构--`边界划分薄弱!`,对树的递归和迭代调用`待形成明确的思路` - 🔜 明天切回溯;状态饱满,争取明日拿下`分治`与`回溯` - **2025-11-14---(总进度:32道)** - 💡 今日问题: 动态规划的状态定义与状态转移方程仍不清晰。虽意识到分治、回溯与 DP 均基于递归,但三者边界与建模逻辑需系统梳理。 - ⏸️ **计划**:暂停更新 2-3 天,专注夯实 DP 基础。 - **2025-11-17---(总进度:32道+额外10道)** - ✅ 用分治思想完成十道题目 - 💡 今日问题:在实现「查找第 k 个最大元素」时,普通快排因大量重复值退化至 O(n²); 通过引入 三路快排(3-Way Partition)的迭代实现,成功将时间复杂度稳定至 平均与最坏均为 O(n),空间复杂度 O(1) - 🔜 今日状态回暖,明日计划:复盘分治逻辑框架,正式启动回溯专题 - **2025-11-18---(总进度:32道+额外21道)** - ✅ 用回溯思想完成11道题目 - 💡 今日问题: 在实现「解数独」(LeetCode 37)时,初始采用每次递归遍历验证合法性,后改用 `set` 分别维护行、列、九宫格的已用数字,显著提升效率并通过测试; - 当前实现未使用启发式策略,后续可引入 **MRV(最小剩余值)** 进一步优化搜索顺序; - 意外观察到:CPython 中 `set` 对小整数(如 1~9)因哈希与对象缓存机制,在遍历时呈现“伪有序”现象(不可依赖,仅作记录)。 - 🔜 明日计划:完成剩余回溯专题题目,同步梳理回溯解题通用框架与剪枝规律,形成 `notes/` 下的总结笔记。 - **2025-11-19---(总进度:32道+额外25道)** - ✅ 完成 4 道回溯题 - 💡 今日问题: - 「递增子序列」(LeetCode 491):用 set 实现同层去重,绕过无法排序的限制; - 「目标和」(LeetCode 494):尝试回溯建模,DP 转换仍需加强。 - 🔜 明日:收尾回溯题,整理通用框架与剪枝技巧到 notes/。 - **2025-11-20 — (总进度: 32道+额外29道)** - ✅ 完成 4 道动态规划题目,聚焦背包类问题 - 💡 **今日思考**:深入理解 0-1 背包与完全背包的核心区别——内层循环**逆序 vs 正序**的本质在于是否允许重复使用物品。 - 通过手动推演状态转移过程,逐步建立对“状态覆盖”机制的直觉。 - 🔜 **后续计划**: - 收尾回溯专题,完善 `notes/backtracking.md` 中的剪枝与去重模式; - 进阶动态规划:系统学习二维 DP、线性 DP 与状态机 DP 建模方法。 - **2025-11-21 — (总进度: 32道+额外37道(分治10道,回溯15道,dp12道))** - ✅ 完成 8 道动态规划题目,覆盖:`线性DP`(如打家劫舍、爬楼梯),`状态机DP`(买卖股票),`二维DP`(LCS) - 💡 **今日思考** - **问题**:即使思路接近正确,一个边界条件(如 `dp[0]` 未初始化或初始化错误)也会导致结果完全错误,且难以调试。 - **认知**:DP 的核心在于状态定义与转移逻辑的**数学建模**,而非代码实现本身。调试时应优先验证状态含义是否清晰、初始值/边界是否合理。 - 🔜 **后续计划** - 暂停新 DP 题目,优先完善 `notes/backtracking.md` 和 `notes/dp.md` 文档 - **2025-11-25 — (总进度: 38道+额外37道(分治10道,回溯15道,dp12道))** - ✅ 完成 4 道分治,2道Kadane 算法题目 - 🔜 **后续计划** - 完成二分查找和堆相关面试题目 - **2025-11-26 — (总进度: 42道+额外37道(分治10道,回溯15道,dp12道))** - ✅ 完成 4 道二分查找题目 - 💡 **今日思考** - **问题**:「寻找峰值」(LeetCode 162)用 while left < right,最终 left == right 即答案,区间可看作左闭右开 - 当 right = left + 1 时,mid = left;若此时执行 right = mid - 1,会跳过某些索引,导致漏解。 - 「搜索旋转排序数组」(LeetCode 33),mid 可能等于 left(如区间很小),但不会等于 right,因此判断左半有序必须用 nums[left] <= nums[mid],不能用 <。 - 🔜 **后续计划** - 继续完成二分查找和堆相关面试题目 - **(后续每日持续更新...)** > 💡 记录说明:每日提交后在此追加一条,标明完成内容与关键思考,便于复盘。 ## 📎 相关链接 - 项目仓库:[https://gitee.com/myparadises/leetcode-150](https://gitee.com/myparadises/leetcode-150) - 题目来源:[LeetCode面试150题](https://leetcode.cn/studyplan/top-interview-150/) --- ✨ **仅用于个人学习与面试准备 | 持续更新中**