Re:Algo - Starting Algorithms from Zero
大学幸运的发现了编程很有趣,开始了学习
下面是结合自身学习思路的一些整理和分享,亲测0基础只要科学计划完全可以入门
主要分为三个部分
将网上丰富的学习资源 (网课+博客+资料..) 系统整理一份笔记
有了自己的框架之后刷题大脑可以自动归档,可以参考下面分类来搭建自己的框架
下面是概览的标题,点击可以跳转到我整理的题解
- [Lc(1)双指针_1] 移动零 | 复写零 | 快乐数
- [Lc(1)双指针_3] 双指针 | 三数 | 四数之和
- [Lc(1)双指针_2] 盛水最多的容器 | 有效三角形的个数 | 和为S的两个数字
- [Lc(2)滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数
- [Lc(2)滑动窗口_2] 水果成篮 | 字符串中所有字母异位词 | 串联所有单词的子串
- [Lc(4)前缀和_1] 一维/二维模板 | 寻找数组的中心下标 | 除自身以外数组的乘积
- [Lc5 位运算_1] 常见用法 | 判定字符是否唯一 | 丢失的数字 | 两整数之和 | 只出现一次的数字 II
- [Lc6_模拟] 替换所有的问号 | 提莫攻击 | Z 字形变换 | 外观数列
- [Lc7_分治-快排] 分治 | 颜色分类 | 快速排序
- [Lc7_分治-快排] 快速选择排序 | 数组中的第K个最大元素 | 库存管理 III
- [Lc10_hash] 总结 | 两数之和 | 字符重排 | 存在重复元素 i ii | 字母异位词分组
- [Lc11_字符串] 最长公共前缀 | 最长回文子串 | 二进制求和
- [Lc12_栈] 删除相邻重复项 | 比较含退格的字符串 | 基本计算器 II
- [Lc13_queue+bfs] N 叉树的层序遍历 | 锯齿形层序遍历 | 二叉树最大宽度 | 每个树行中找最大值
- [Lc14_priority_queue] 最后一块石头重量 | 数据流中的第 K 大元素 | 前K个高频单词 | 数据流的中位数
- [Lc15_bfs+floodfill] 图像渲染 | 岛屿数量 | 岛屿的最大面积 | 被围绕的区域
- [Lc16_bfs最短路] 迷宫中离入口最近的出口 | 最小基因变化
- [Lc16_bfs最短路_2] 单词接龙 | 为高尔夫比赛砍树
- [Lc17_多源 BFS_最短路] 矩阵 | 飞地的数量 | 地图中的最高点 | 地图分析
- [Lc18_BFS拓扑排序] 邻接表 | 课程表I II
- [Lc18_拓扑排序] string+queue+map | 火星字典
- 搜索是递归中的一个分支
- 回溯是搜索中的一个分支
- 因此我们学习顺序是递归、搜索、回溯。
总结详见:[Lc_1 递归] 递归,搜索与回溯总结 | 详解汉诺塔问题
[Lc递归,搜索与回溯]
- [Lc_1 递归] 递归,搜索与回溯总结 | 详解汉诺塔问题
- [Lc_1 递归_2] 合并两个有序链表 | 反转链表 | 两两交换链表中的节点 | Pow(x, n)-快速幂
- [Lc_2 二叉树dfs] 布尔二叉树的值 | 根节点到叶节点数字之和 | 二叉树剪枝
- [Graph] 邻接矩阵 | 邻接表
- [Lc_2 二叉树dfs_2] 验证二叉搜索树 | 第K小的元素 | 二叉树的所有路径
- [Lc_3 回溯] 决策树 | 全排列 | 子集
- [Lc4_dfs] 括号生成 | 组合 | 目标和
- [Lc4_dfs] 找出所有子集的异或求和 | 全排列 II | 电话号码的字母组合
- [Lc4_dfs] 组合总和 | 字母大小写全排列 | 优美的排列
- [Lc4_dfs] N 皇后 | 有效的数独
- [Lc4_dfs] 解数独 | 单词搜索
- [Lc4_dfs] 黄金矿工 | 不同路径 III
- [Lc5_dfs+floodfill] 简介 | 图像渲染 | 岛屿数量
- [Lc5_dfs+floodfill] 岛屿的最大面积(&传参) | 被围绕的区域 | 太平洋大西洋水流问题(双标记位传参)
- [Lc6_记忆化搜索] 扫雷游戏 | 理解 递归vs记忆化搜索vs dp
- [Lc6_记忆化搜索] 不同路径 | 解决智力问题 | 有序三元组中的最大值
- [Lc6_记忆化搜索] 最长递增子序列 | 矩阵中的最长递增路径
动态规划最核心的思想,就在于 拆分子问题,记住过往,减少重复计算。
0基础可以先通过[dp_0] 第 N 个泰波那契数 | 三步问题建立直觉
[动态规划]
- [dp_0] 第 N 个泰波那契数 | 三步问题
- [dp_1] 使用最小花费爬楼梯 | 解码方法 | 虚拟dp[0]=0
- [dp_3 路径问题] 不同路径 | 障碍物 II | 珠宝的最高价值
- [dp4_路径问题] 下降路径最小和 | 最小路径和 | 地下城游戏
- [dp5_多状态dp] 按摩师 | 打家劫舍 II | 删除并获得点数 | 粉刷房子
- [dp_6] 多状态 | 买卖股票的最佳时机 I II III IV | 含冷冻期 | 手续费 | 交易次数
- [dp7_子数组] 最大子数组和 | 环形 | 最大子数组乘积
- [dp8_子数组] 乘积为正数的最长子数组长度 | 等差数列划分 | 最长湍流子数组
- [dp9_子数组] 单词拆分 | 环绕字符串中唯一的子字符串
- [dp10_子序列] 最长递增子序列 | 摆动序列 | 最长递增子序列的个数
- [dp11_最长子序列(不连续)] 最长数对链 | 最长定差子序列 | 最长的斐波那契子序列的长度
- [dp12_回文子串] 最长回文子串 | 分割回文串 IV
- [dp_13] 最长等差数列(len) | 等差数列划分 II - 子序列(num)
- [dp14_回文串] 分割回文串 II | 最长回文子序列 | 让字符串成为回文串的最少插入次数
- [dp15_两个数组/二维] 最长公共子序列 | 不相交的线 | 不同的子序列 | 再论动态规划
- [dp16_两个数组] 通配符匹配 | 交错字符串 | 两个字符串的最小ASCII删除和
- [dp17_两个数组] 正则表达式匹配 | 最长重复子数组
- [dp18_背包问题] 介绍 | 01背包 | 分割等和子集
- [dp19_01背包] 目标和 | 最后一块石头的重量 II
- [dp20_完全背包] 介绍 | 零钱兑换
- [dp21_完全背包] 零钱兑换 II | 完全平方数
- [dp22_二维背包] 一和零 | 盈利计划
- [dp23_似包非包] 组合总和 Ⅳ | 不同的二叉搜索树 | 卡特兰数
tips: 多刷题多体会~
- 与其说是贪心算法,不如说是贪心策略。
贪心策略:解决问题的策略( 局部最优 —> 全局最优)。
- 把解决问题的过程分为若干步;
- 解决每一步的时候,都选择当前看起来 “最优的” 解法;
- “希望” 得到全局最优解。
遇到不会的贪心题,很正常,把心态放平。
- 前期学习的时候,把重点放在贪心的策略上,把这个策略当成经验吸收。往后遇到相同类型的题目时可以用经验去解决这道问题。
- 当知道贪心是正确的时候,要想到如何去证明。
可以从[贪心_1] 介绍 | 柠檬水找零等题目入手,体会贪心策略如何落地。
[贪心算法]
- [贪心_1] 介绍 | 柠檬水找零
- [贪心_2] (含证明)将数组和减半的最少操作次数 | 最大数
- [贪心_3] 摆动序列 | 最长递增子序列
- [贪心_4] 递增的三元子序列 | 最长连续递增序列 | 买卖股票的最佳时机 | & ||
- [贪心_5] K 次取反后最大化的数组和 | 按身高排序
- [贪心_6] 田忌赛马 | 最长回文串 | 增减字符串匹配 | 分发饼干
- [贪心_7] 最优除法 | 跳跃游戏 II | 加油站
- [贪心_8] 跳跃游戏 | 单调递增的数字 | 坏了的计算器
- [贪心_9] 合并区间 | 无重叠区间 | 用最少数量的箭引爆气球
按题型整理思路,记录解题步骤与常见坑点,形成可复用的知识框架。
笔记思路: 可以参考这篇文章中t4数据流的中位数的梳理方法 [Lc14_priority_queue] 最后一块石头重量 | 数据流中的第 K 大元素 | 前K个高频单词 | 数据流的中位数
tips:记录的时候可以多思考,可能写一篇需要3-4个小时,但在之后刷题中可提效远不止3-4小时
-
xmind 导图工具:以前几天每日一题中的区间贪心为例,可以借助导图清晰梳理题解(参考 [贪心_9] 合并区间 | 无重叠区间 | 用最少数量的箭引爆气球)。
-
Goodnotes iPad 手绘工具:多种颜色画笔,可以清晰地对下面2个部分进行写写画画。
- 写代码前:模拟代码,例如 N 皇后 | 有效的数独。
- 写代码后:梳理代码,以 正则表达式匹配 为例,提炼关键状态转移并总结心得。
-
LICEcup 录屏 gif 动图,可用于演示 递增的三元子序列 | 最长连续递增序列 | 买卖股票的最佳时机 等题目的贪心过程。
复习是一件随时都可以做的事情,手机写代码不是很方便,可以想到的时候用来看代码,给代码做注释,就像是和代码二次对话一样
“工欲善其事必先利其器”,配置好环境可以让坐在电脑前刷题变的更加快乐:VSCode配置LeetCode调试环境(I love vscode)
题单:灵神的伟大无需多言(ㄒoㄒ)分享|如何科学刷题?
脑袋刷卡了可以换一件事情做,可以去 跑步/打球/ 游泳/爬山/组乐队/发呆...尽量从电子设备抽离,接触现实世界
(偶尔steam也行,可以进入到另一个世界,如果长时间看屏幕注意滴眼药水保护视力
学会放松和学会刷题一样重要,健康的身心才可以更好的去做喜欢的事情
- git clone 到本地,用 Typora 打开,可以直接对源.md文件进行自己的批注
- 所有笔记 & 代码均为开源,支持自由获取/引用/改造,二创可以fork一份
tips:如果没使用过 GitHub,复制仓库链接给 AI 并提问——“我该如何把这个仓库 clone 到本地使用”,碰到问题继续追问 AI,刚好实践学一下GitHub使用方法~
好的模板大家可以在仓库中分享开源出来 共同学习进步
way:fork一份,在templates文件夹下创建自己name的子文件,就可以从0开始维护自己的算法模板啦
templates部分包含各种算法模板,目前主要由elainafan持续维护,欢迎大家提issue/pr/email me: 开源自己的算法模板/补充想法/提出问题/完善提单/学习交流...
如果你也想为这个仓库做一些贡献,可以pr提交一些完善/模板后email me become contributors~
Thank you to all the people who have already contributed to this repo templates
后续计划对系列文章进行总结整理,更新至repo:X-Plore/从零开始的X学习之路 下
内容比较多,需要一些时间,可以先mark一下,有什么感兴趣的想先看到,可以在issue中对↓专栏文章进行选题投票(in process)
... ...(more)
期待一切有助于学习&进步的建议与共创~可以直接提issue/email me
附录: "那一天,人们回想起了这个仓库的起因,那篇被删掉的文章..." 仓库由来:leetcode题单分享_第一版完整的原文截图原文因为一些原因已经不存在了,这是一份备份。






