About 🔥🔥🔥 只有熟练掌握基础的数据结构与算法,才能对复杂问题游刃有余(java,javascript,python)。🔥🔥🔥 本文包含动态规划、树、列表、队、栈等数据结构和算法,使用动画形式展示,并且包含demo和测试题
如果大家觉得上面的集体活动效率比较低,我目前也接受 1v1 算法辅导,价格根据你的算法基础以及想要学习的内容而定,感兴趣的可以加我微信:DevelopeEngineer,备注“算法辅导”。
leetcode 题解,记录自己的 leetcode 解题之路。
本仓库目前分为五个部分:
-
第一个部分是 leetcode 经典题目的解析,包括思路、关键点和具体的代码实现。
-
第二部分是对于数据结构与算法的总结
-
第三部分是 anki 卡片, 将 leetcode 题目按照一定的方式记录在 anki 中,方便大家记忆。
-
第四部分是每日一题,每日一题是在交流群(包括微信和 qq)里进行的一种活动,大家一起解一道题,这样讨论问题更加集中,会得到更多的反馈。而且这些题目可以被记录下来,日后会进行筛选添加到仓库的题解模块。
-
第五部分是计划, 这里会记录将来要加入到以上三个部分内容
- 这里有一张根据互联网公司面试中经常考察的问题类型总结出的思维导图,我们可以结合图片中的信息分析一下。
(图片来自 leetcode)
其中算法,主要是以下几种:
- 基础技巧:分治、二分、贪心
- 排序算法:快速排序、归并排序、计数排序
- 搜索算法:回溯、递归、深度优先遍历,广度优先遍历,二叉搜索树等
- 图论:最短路径、最小生成树
- 动态规划:背包问题、最长子序列
数据结构,主要有如下几种:
- 数组与链表:单 / 双向链表
- 栈与队列
- 哈希表
- 堆:最大堆 / 最小堆
- 树与图:最近公共祖先、并查集
- 字符串:前缀树(字典树) / 后缀树
我在网上找到一份 《Interview Cheat Sheet》,这个 PDF 列举了面试的模板步骤。,详细指示了如何一步步完成面试。
这个 pdf 开头就提到了好的代码三个标准:
- 可读性
- 时间复杂度
- 空间复杂度
这写的太好了。
紧接着,列举了 15 算法面试的步骤。比如步骤一:当面试官提问完后,你需要先记下来关键点(之后再写注释和代码) 看完我的感受就是,面试只要按照这个来做,成功率蹭蹭提升
- 动态规划(重置版)
- 大话搜索
- 二叉树的遍历
- 回溯
- 哈夫曼编码和游程编码
- 布隆过滤器🖊
- 前缀树🖊
- 《日程安排》专题
- 《构造二叉树》专题
- 滑动窗口(思路 + 模板)
- 位运算
- 小岛问题🖊
- 最大公约数
- 并查集
- 平衡二叉树专题
- 蓄水池抽样
- 单调栈
或许是一个可以改变你刷题效率的浏览器扩展插件。
不能访问谷歌商店的朋友可以去我的公众号回复插件获取离线版。强烈推荐大家使用谷歌商店安装, 这样如果有更新可以自动安装,毕竟咱们的插件更新还是蛮快的。
另外大家也可以使用 zerotrac 开发的用于计算力扣中题目分数的网站。这里的分数指的是竞赛分,大家可以根据自己的竞赛分选择稍微比自己竞赛分高一点的题目进行练习,注意这个只是根据通过人数等计算的一个预估分数。地址:https://zerotrac.github.io/leetcode_problem_rating/
- 字典序列删除
- 一次搞定前缀和
- 字节跳动的算法面试题是什么难度?
- 字节跳动的算法面试题是什么难度?(第二弹)
- 《我是你的妈妈呀》 - 第一期
- 一文带你看懂二叉树的序列化
- 穿上衣服我就不认识你了?来聊聊最长上升子序列
- 你的衣服我扒了 - 《最长公共子序列》
- 一文看懂《最大子序列和问题》
这里仅列举具有代表性题目,并不是全部题目
目前更新了 200 多道题解,加上专题涉及的题目,差不多有 300 道。
这里的题目难度比较小, 大多是模拟题,或者是很容易看出解法的题目,另外简单题目一般使用暴力法都是可以解决的。 这个时候只有看一下数据范围,思考下你的算法复杂度就行了。
当然也不排除很多 hard 题目也可以暴力模拟,大家平时多注意数据范围即可。
以下是我列举的经典题目(带 91 字样的表示出自 91 天学算法活动):
-
0066. 加一 91
-
0160. 相交链表 91
-
0232. 用栈实现队列 👍 91
-
821. 字符的最短距离 91
中等题目是力扣比例最大的部分,因此这部分我的题解也是最多的。 大家不要太过追求难题,先把中等难度题目做熟了再说。
这部分的题目要不需要我们挖掘题目的内含信息, 将其抽象成简单题目。 要么是一些写起来比较麻烦的题目, 一些人编码能力不行就挂了。因此大家一定要自己做, 即使看了题解 ”会了“,也要自己码一遍。自己不亲自写一遍,里面的细节永远不知道。
以下是我列举的经典题目(带 91 字样的表示出自 91 天学算法活动):
-
Longest Contiguously Strictly Increasing Sublist After Deletion 👍
-
Bus Fare 👍
-
0061. 旋转链表 91
-
0394. 字符串解码 91
-
1770. 执行乘法运算的最大分数 👍 91
困难难度题目从类型上说多是:
- 图
- 设计题
- 游戏场景题目
- 中等题目的 follow up
从解法上来说,多是:
- 图算法
- 动态规划
- 二分法
- DFS & BFS
- 状态压缩
- 剪枝
从逻辑上说, 要么就是非常难想到,要么就是非常难写代码。 这里我总结了几个技巧:
- 看题目的数据范围, 看能否暴力模拟
- 暴力枚举所有可能的算法往上套,比如图的题目。
- 总结和记忆解题模板,减少解题压力
以下是我列举的经典题目(带 91 字样的表示出自 91 天学算法活动):
-
2306. 公司命名 枚举优化好题
-
5254. 卖木头块 动态规划经典题