第一阶段按照 tag 去刷, 第二阶段则要一题多解,多题同解,挖掘题目背后的东西
去年找互联网的工作,刷了两遍LeetCode,只做了前200道。面试过程中碰到的算法题基本都被秒杀了。最后拿了9个offer。我是按Tag来刷的。链表,二叉树,回溯,深度宽度优先遍历,图,贪心,动规,数组,哈希表……每个tag由easy到hard,每道题先自己思考,不会的参考了一个开源的解答或者参考Discuss或者博客。开始的时候自己独立思考的时间比较长,后来没了耐心,不会的题目就马上看解答了。一般题目解法有多种,这时候最好尝试一下其他的做法,至少要知道思路。比如有关图的题目就会有DFS和BFS两种解法。Discuss里一般都会有高质量的解答。关键是每道题都要弄明白。一开始用IDE,跑出正确结果,再在线默写代码。后来写的多了,直接在线写代码了。这是一个自然的过程,做的多了就有“手感”了。总结一下,按tag由易到难,每道题弄清楚,知道其他的解法,这是核心!搞定了核心,
前200题是最经典的。前期可以先积累量,把前两百题刷完 刷够量之后,对算法有了一个大概的理解。然后再精刷。最好先按tag刷。分类总结下自己需要刷的tag。然后按出现频率排序,再按这个顺序刷。最后面试前再刷要面试的那个公司的高频题。
分享一下身边大神的刷题顺序:
如果你时间比较紧迫,为了找工作而刷题,我建议你先刷热门推荐,一共两百多道题。
在 https://leetcode-cn.com/problemset/all/ 页面的右侧。先刷热题 HOT 100,再刷精选 TOP 面试题,之后刷其他的题。如果你时间比较充裕,那我建议你:按从低到高的难度分组刷按 tag 分类刷定期复习,重做之前刷过的题
刷题方法:
第一遍:可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。
第二遍:先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。
第三遍:提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。定期总结:按照题目类型进行总结:针对一类问题,总结有哪些解题方法,哪种方法是最优的,为什么。总结重点:有些题你刷了好多遍都还是不会,那就要重点关注,多思考解决方法,不断练习强结合图解刷题:有些人认为刷题比较枯燥,比较抽象。那你可以结合动画图解刷题。**
- Learn Data Structures and Algorithms for free
- Top 7 Algorithms for Coding Interviews Explained SIMPLY
1 入门系列---这些书籍通过图片、打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现,但是看过以下这些书对于之后实现算法打下坚实的思维基础
- 啊哈!算法.PDF---本书中涉及到的数据结构有栈、队列、链表、树、并查集、堆和图等;涉及到的算法有排序、枚举、深度和广度优先搜索、图的遍历,当然还有图论中不可以缺少的四种最短路径算法、两种最小生成树算法、割点与割边算法、二分图的最大匹配算法等
- 算法图解---这本图解书很容易看懂,不枯燥
- 趣学算法.PDF---非常好的一本书,图解多,思路清晰,不仅讲了问题分析算法设计的过程,还讲了如何优化算法
- 大话数据结构
- 学习算法思想 修炼编程内功视频---这样精致的课程很难找到第二个
- 算法导论.pdf---本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受
- 数据结构与算法 Java版
- 数据结构与算法:Python语言描述
- 学习JavaScrit数据结构与算法(第2版)
- 数据结构与算法分析:C语言描述(原书第2版)
- 数据结构与算法分析:C++描述(第3版)
- 剑指Offer:名企面试官精讲典型编程题(第2版)---剖析了80个典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这5个面试要点
- 算法谜题---算法谜题,就是能够直接或间接地采用算法来加以解决的谜题。求解算法谜题是培养和锻炼算法思维能力一种最有效和最有乐趣的途径
- 编程之法 面试和算法心得
-
编程珠玑(第2版•修订版)---融深邃思想、实战技术与趣味轶事于一炉的奇书,带你真正领略计算机科学之美
-
程序员实用算法---重点关注的是实用、立即可用的代码,并且广泛讨论了可移植性和特定于实现的细节,介绍了一些有用但很少被讨论的算法,它们可用于语音查找、日期、B树和索引文件、数据压缩、任意精度的算术、校验和与数据验证,并且还最全面地介绍了查找例程、排序算法和数据结构
-
编程之美
-
数据挖掘原理与算法---覆盖面最广,除了所有书都有的内容外,还包括FOIL算法和空间数据挖掘等
-
集体智慧编程
线性数据结构包括数组、链表、栈、队列。
非线性结构包括树、哈希表、堆、图。**
- 负雪明烛---阿里巴巴工程师 7 年写了 1000 多篇 LeetCode 题解
- 李威威---中文力扣的大 V,对力扣题目掌握很全面,写得题解非常详细,对题目举一反三
- 花花酱---基本每个题都有博客和视频,强烈推荐看他的视频
- Grandyang---在博客园更新了几乎所有力扣题目,收获了 1200万 阅读
- 土妹: 1600多道题目,刷哪些?什么顺序?刷多少?难度怎么分配?
【干货】程序员面试一定要掌握的10个算法 | LeetCode 刷题清单 | 100小时+刷题经验分享 [上]| ---|
小白都能懂的学算法方法!我刷了 1000 道,LeetCode 入门不难!【程序员鱼皮】 |
---|
Grokking the Coding Interview: Patterns for Coding Questions----Leetcode刷题顺序,看这一篇就够了 |
--- |
Data Structures | algorithms |
---|
Interviews---Your personal guide to Software Engineering technical interviews 在线炼习 | Cracking the Coding Interview 6th Ed. Solutions | data structures and algorithms interviews 在线炼习 |
---|
GitHub上很火的算法可视化项目---在线动态演示算法的网站,可以很清楚的看到算法运行的整个过程 |
---|
very good algorithmic |
---|
java 算法例子程序 | 数据结构精讲:从原理到实战 | leetcode笔记 |
---|
代码随想录算法训练营 |
---|
算法快速入门教程(多语言实现)|Python机器学习算法入门教程|数据结构与算法/leetcode/lintcode题解|前Google工程师,5万+人跟着学的《数据结构和算法之美》专栏作者 | ---|----|---|---|
数据结构与算法学习整理大纲 | labuladong 的算法小抄 | leetcode笔记 |
---|
精尽数据结构与算法学习指南 | 九章算法官方频道 | X Code---系统设计 和 算法 | 经验分享 这 5 个自学算法的工具和网站你知道几个? |
---|
来Offer---LaiOffer | Java数据结构与算法教程 | 花花酱算法---很好 | 九章算法---令狐冲的算法小抄 |
---|
OI Wiki---致力于成为一个免费开放且持续更新的 编程竞赛 (competitive programming) 知识整合站点,准备了竞赛中的基础知识、常见题型、解题思路以及常用工具等 |
---|
LeetCode CookBook---霜神是前阿里巴巴资深后端工程师 | 用java表示数据结构和算法 | 算法总结 |
---|
图解 Java 中的数据结构及原理,傻瓜也能看懂 | leetcode-master---本项目是一套完整的刷题计划,旨在帮助大家少走弯路,循序渐进学算法 |
---|
可以查询各个公司算法面试高频题的网站 | lintcode | leetcode | leetcode 中文 | 牛客网 |
---|
Github top 12 ---All Algorithms implemented in Java | 专门为刚开始刷题的同学准备的算法基地 | 洛谷---为广大算法竞赛选手、程序设计爱好者以及院校企业机构提供算法题库、社区、训练工具、在线教育为一体的解决方案,国内著名的题库与社区 |
---|
各家的在线判题系统---POJ是ACM选手首选OJ,输入模式也是ACM模式 |
---|
FB面试官揭秘算法面试速成技巧 — 怎样做到 Bug Free 和刷100题等于别人刷300题 | LeetCode 算法面试题解 |
---|
数据之间的关系有 3 种,分别是 "一对一"、"一对多" 和 "多对多",前两种关系的数据可分别用线性表和树结构存储,后一种"多对多"逻辑关系数据的结构——图存储结构
|Data Structures and Algorithms in Java ||
第一章 数据结构和算法概述 | |
---|---|
1-1 数据结构和算法的关系 | |
1-1 数据结构的逻辑结构和物理结构 | |
1-2 线性结构和非线性结构 | |
1-3 算法的时间复杂度 | |
1-3-1 关于时间复杂度,你不知道的都在这里 | |
1-3-2 O(n)的算法居然超时了,此时的n究竟是多大? | |
1-3-3 通过一道面试题目,讲一讲递归算法的时间复杂度! | |
1-4 算法的空间复杂度 | |
1-4-1 关于空间复杂度,可能有几个疑问? | |
1-4-2 可能对递归理解的还不够!还差得远! | |
1-4-3 刷了这么多题,你了解自己代码的内存消耗么 | |
动态连通性问题算法 | |
6种逻辑结构 | |
第二章 集合逻辑结构篇 | |
线性逻辑结构篇 | |
第三章 静(动)态数组和矩阵(Array)---“一对一”逻辑关系的数据,最佳的存储方式是使用线性表 | |
3-1 静态数组 | |
3-1-1 稀蔬SPARESARRAY数组 | |
3-1-2 矩阵---二维数组 多维数组逻辑结构篇 | |
3-2 动态数组(dynamic array) | |
3-2-0 在Java中如何使用动态数组 | |
3-2-0 如何在Java中使用静态数组构建动态数组 | |
3-4 数组:总结篇 | |
第四章 链表(Linked list)---“一对一”逻辑关系的数据,最佳的存储方式是使用线性表 | |
3-0 静态链表和动态链表的区别 | |
3-1 静态链表 | |
3-1-1 单向链表(singly linked list) | |
3-1-2 双向链表(doubly linked list) | |
3-1-3 环型链表 | |
3-1-4 双向环链表 | |
3-2 动态链表 | |
3-3 链表反转 | |
3-4 有序链表 | |
3-6 链表:总结篇 | |
第五章 字符串---“一对一”逻辑关系的数据,最佳的存储方式是使用线性表 | |
第六章 位运算 | |
5-1 利用位运算实现集合 | --- |
第七章 栈 队列---“一对一”逻辑关系的数据,最佳的存储方式是使用线性表 | |
5-1 栈 | |
5-2 队列 | |
5-3 栈与队列:总结篇 | |
--- | --- |
第八章 散列表 | |
排列 | |
子集 | |
组合 | |
--- | --- |
第九章 排序算法 | |
7-1 内部排序 只使用内存 | |
7-1-1 冒泡排序 | |
7-1-1-1 冒泡排序 算法基本思想 | |
7-1-1-1 冒泡排序 算法的时间复杂度 | |
7-1-1-1 冒泡排序 算法的空间复杂度 | |
7-1-1-1 冒泡排序 算法的稳定性 | |
7-1-2 插入排序 | |
7-1-2-1 直接插入排序 | |
7-1-2-1 直接插入排序 算法基本思想 | |
7-1-2-1 直接插入排序 算法的时间复杂度 | |
7-1-2-1 直接插入排序 算法的空间复杂度 | |
7-1-2-1 直接插入排序 算法的稳定性 | |
7-1-3 选择排序 | |
7-1-3-1 简单选择排序 算法基本思想 | |
7-1-3-1 简单选择排序 算法的时间复杂度 | |
7-1-3-1 简单选择排序 算法的空间复杂度 | |
7-1-3-1 简单选择排序 算法的稳定性 | |
7-1-4 希尔排序 | |
7-1-5 稳定排序 | |
7-1-6 快速排序 | |
7-1-7 归并排序 | |
7-1-8 基数排序 | |
7-1-9 分割排序 | |
7-1-10 逆序数排序 | |
7-1-11 最小成本排序 | |
7-2 外部排序 针对于体积过大以至内存装不下的文件,在对其包含的记录进行排序时所用到的算法 | |
7-2-1 多路平衡归并排序算法(多路归并排序、胜者树、败者树) | |
7-2-2 置换选择排序算法 | |
7-2-3 最佳归并树 | |
--- | --- |
第十章 查找算法 | |
1 顺序查找算法 | |
2 二分查找算法(非递归) | |
---二分法专题 | |
---二分查找算法(非递归)的应用场景 | |
---二分查找算法(非递归)的解决方案的基本步骤 | |
---二分查找算法(非递归)的代码实现 | |
---二分查找算法(非递归)的时间复杂度 | |
---二分查找算法(非递归)的空间复杂度 | |
3 分块查找算法(索引顺序查找) | |
4 静态树表查找算法 | |
5 二叉排序树查找算法(二叉查找树) | |
6 红黑树查找算法(更高级的二叉查找树) | |
7 平衡二叉树查找算法(AVL树) | |
8 B-树查找算法 | |
9 B+树查找算法 | |
10 键树查找算法(双链树和字典树) | |
11 插值查找算法 | |
12 奜波那契(黄金分割法)查找算法 | |
数据结构中的查找算法 | |
--顺序表结构中的查找算法 | |
--数组结构中的查找算法 | |
--链表结构中的查找算法 | |
--树结构中的查找算法 | |
--图结构中的查找算法 | |
--- | --- |
非线性结构篇 | |
第十一章 哈希表 | |
1. 直接寻址 | |
2. 散列函数 | |
3. 开放地址法 | |
4. 链接法 | |
5. 再hash法 | |
6. Bloom Filter | |
7. HashMap底层原理 | |
8. 源码分析 | |
---HashTable源码分析 | |
---HashMap源码分析 | |
---HashSet源码分析 | |
---HashCode源码分析 | |
---LinkedHashMap源码分析 | |
---Equals源码分析 | |
---LinkList源码分析 | |
---ArrayList 源码分析 | |
---TreeMap源码分析 | |
9. 哈希表:总结篇 | |
--- | --- |
第十三章 堆 | |
--- | --- |
第十四章 树逻辑结构篇---“一对多”逻辑关系数据的结构,是一种非线性存储结构 | |
第十五章 图逻辑结构篇---多对多"逻辑关系数据的结构 | |
图的搜索 | |
广度优先搜索算法 | |
深度优先搜索 | |
最短路径搜索 | |
---Dijkstra算法(狄克西特拉算法) | |
---A* 算法 | |
---Bellman-Ford算法(贝尔曼-福特算法) | |
---Floyd-Warshall算法 | |
拓扑排序 | |
---DFS实现 | |
---BFS实现 | |
---时间复杂度 | |
并查集 | |
---Quick Find | |
---Quick Union | |
---Union Find | |
最小生成树 | |
---Prim算法 | |
---Kruskal算法 | |
10-1 二分图匹配 | [无代码] |
10-2 | [无代码] |
--- | --- |
--- | --- |
第十六章 基本算法思想 | |
---|---|
枚举算法思想 | |
模拟算法思想 | |
递推算法思想 | |
递归算法思想 | |
分治算法思想 | |
概率算法思想 | |
贪心算法思想 | |
动态规划算法思想 | |
排序算法思想 | |
试探算法思想 | |
二分算法思想 | |
倍增算法思想 | |
构造算法思想 | |
前缀和 & 差分算法思想 | |
--- | --- |
第十七章 程序员常用算法 | |
递归算法 | |
一篇总结带你彻底搞透回溯算法 | |
顺序查找算法 | |
第九章 排序算法 | |
7-1 内部排序 只使用内存 | |
7-1-1 冒泡排序 | |
7-1-1-1 冒泡排序 算法基本思想 | |
7-1-1-1 冒泡排序 算法的时间复杂度 | |
7-1-1-1 冒泡排序 算法的空间复杂度 | |
7-1-1-1 冒泡排序 算法的稳定性 | |
7-1-2 插入排序 | |
7-1-2-1 直接插入排序 | |
7-1-2-1 直接插入排序 算法基本思想 | |
7-1-2-1 直接插入排序 算法的时间复杂度 | |
7-1-2-1 直接插入排序 算法的空间复杂度 | |
7-1-2-1 直接插入排序 算法的稳定性 | |
7-1-3 选择排序 | |
7-1-3-1 简单选择排序 算法基本思想 | |
7-1-3-1 简单选择排序 算法的时间复杂度 | |
7-1-3-1 简单选择排序 算法的空间复杂度 | |
7-1-3-1 简单选择排序 算法的稳定性 | |
7-1-4 希尔排序 | |
7-1-5 稳定排序 | |
7-1-6 快速排序 | |
7-1-7 归并排序 | |
7-1-8 基数排序 | |
7-1-9 分割排序 | |
7-1-10 逆序数排序 | |
7-1-11 最小成本排序 | |
7-2 外部排序 针对于体积过大以至内存装不下的文件,在对其包含的记录进行排序时所用到的算法 | |
7-2-1 多路平衡归并排序算法(多路归并排序、胜者树、败者树) | |
7-2-2 置换选择排序算法 | |
7-2-3 最佳归并树 | |
--- | --- |
第十章 查找算法 | |
1 顺序查找算法 | |
2 二分查找算法(非递归) | |
---二分法专题 | |
---二分查找算法(非递归)的应用场景 | |
---二分查找算法(非递归)的解决方案的基本步骤 | |
---二分查找算法(非递归)的代码实现 | |
---二分查找算法(非递归)的时间复杂度 | |
---二分查找算法(非递归)的空间复杂度 | |
3 分块查找算法(索引顺序查找) | |
4 静态树表查找算法 | |
5 二叉排序树查找算法(二叉查找树) | |
6 红黑树查找算法(更高级的二叉查找树) | |
7 平衡二叉树查找算法(AVL树) | |
8 B-树查找算法 | |
9 B+树查找算法 | |
10 键树查找算法(双链树和字典树) | |
11 插值查找算法 | |
12 奜波那契(黄金分割法)查找算法 | |
数据结构中的查找算法 | |
--顺序表结构中的查找算法 | |
--数组结构中的查找算法 | |
--链表结构中的查找算法 | |
--树结构中的查找算法 | |
--图结构中的查找算法 | |
--- | --- |
分治算法 | |
---用分治法求数组中的最值 分治算法的一个简单应用 | |
动态规划算法 | |
枚举算法 | |
贪心算法 | |
KMP算法---字符串 | |
---亲身体验一下KMP算法 KMP快速字符串查找算法 | |
普里姆算法---图 | |
RSA加密算法原理 | |
克鲁斯卡尔算法---图 | |
迪杰斯特拉算法---图 | |
弗洛伊德算法---图 | |
马踏棋盘算法 | |
贝尔曼-福特算法---图 | |
k-Means算法---图 | |
欧几里得算法 | |
近拟算法 | |
数论算法 | |
图算法 | |
图像处理算法 | |
B62 序列号生成算法 | 文章 |
修剪与搜索算法 | |
计算几何算法 | |
问题转换算法 | |
并行算法 | |
安全算法 | |
推荐算法 | |
遗传算法 | |
分布式算法 | |
数据挖掘10大算法 | |
网络流算法 | |
漏桶算法 | |
令牌桶算法 | |
分布式一致性算法:Raft OR raft 图解 (秒懂)---疯狂创客圈 | |
分布式一致性算法:Paxos OR Paxos 图解 (秒懂)---疯狂创客圈 | |
空间定位算法 | |
--- | --- |
参考资料
我的第一本算法书.pdf 尚硅谷 韩顺平 图解JAVA数据结构和算法.pdf 算法设计.pdf 图解算法.pdf 算法基础 第5版.pdf 趣学算法.pdf 算法图解.pdf java常用算法手册 第三版本.pdf 算法问题实战策略.pdf (很多题目练习) 天qing2019数据结构.pdf
-
数学数据结构
-
4种逻辑结构
-
- 图
- 图的存储结构
- 图的遍历
- 图
-
物理结构
- 顺序存储结构
- 链式存储结构
-
算法设计
- 贪心算法
- 分而治之策略
- 动态规划
- 修剪与搜索法
- 树搜索法
- 问题转换法
- 图算法
- 计算几何法
- 网络流
- 近拟算法
- 随机算c
-
一致性哈希算法
- Edward Shi的LeetCode 题解视频
- 一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程
- LeetCode All in One 题目讲解汇总
- Leetcode刷题顺序,看这一篇就够了
- 如何科学的刷 LeetCode
- 白板讲题:如何十倍提升刷题效率,把算法题刷透?
- LeetCode按照怎样的顺序来刷题比较好?
- 你会这100道算法题就够了
- 如何最快速的刷题
- 花花酱 LeetCode 全系例
- LeetCode使用介绍
- 高效刷题,如何使用LeetCode来准备美国硅谷技术公司面试,拿到Offer
- 油管上最好的Java 版本 LeetCode逐题详解
- Leetcode刷题大全
- 算法刷题 leetcode(Java版)
- 如何高效刷题
- 左神算法 初级
- 算法刷题教程
- Leetcode 简略题解 - 共567题
- leetcode题解
- 1500道LeetCode解题汇总目录
- 900 多道LeetCode All in One 题目讲解汇总
- 推荐4个基于 Java 语言的 Leetcode 题解项目!算法面试不愁了!
- 用动画的形式演示 LeetCode 上的题目的项目
算法公众号
微信号:labuladong
刷题目录
https://github.com/CyC2018/CS-Notes/b...
推荐的学习频道👍🏻
Youtube :Back To Back SWE
https://www.youtube.com/channel/UCmJz...
B站:
- 花花酱
https://www.youtube.com/c/HuaHuaLeetCode/videos
花花酱youtube传送门: https://www.youtube.com/c/HuaHuaLeetCode/videos
- 小Q刷题
https://space.bilibili.com/149758?fro...
3.绵羊教授
https://space.bilibili.com/354892788?...
绵羊教授youtube传送门: https://www.youtube.com/channel/UCB7X04ICYJ_LMyFN3045wPw
- 编程马拉松算法目录
- 【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
- 【剑指Offer学习】【所有面试题汇总】
- 300分钟搞定数据结构与算法
- 整理得吐血了,二叉树、红黑树、B&B+树超齐全,快速搞定数据结构
- 关于如何学习算法,这些文章可以帮助你!
- 码农找工作之:秒杀算法面试必须掌握的14种模式
- 程序员一般喜欢浏览哪些网站呢?
- 算法与数据结构+一点点ACM从入门到进阶吐血整理推荐书单(珍藏版)
- 从入门到修仙的算法之路
- https://github.com/githubofrico
- 可视化的数据结构 - 各种算法动画演示
- Algomation:查看、创建和分享算法的学习平台
- Algorithm Visualizer,做得很好
- [数据结构与算法]超级详细解读基本排序算法(不看后悔,带排序演示动画)
- 剖析八种经典排序算法
- https://github.com/zhuli19901106/leetcode-2
- 看动画学算法
- Java排序算法详解及示例汇总——超详细
- 程序员必须掌握的核心算法有哪些
- 那些年,我们又爱又恨的HashMap,你掌握了吗?
- 怎么学好数据结构?
- 数据结构当中的图怎么都弄不懂怎么办?
- 学 [数据结构、算法] 的资源推荐
- 有哪些学习算法的网站推荐?
- 24张图,九大数据结构安排得明明白白!
- 十大经典排序算法大梳理 (动图+代码)
- 数据结构里各种难啃的“树”,一文搞懂它
- 一篇文章彻底学会递归思路解题!
- 推荐两位谷歌大佬的算法刷题笔记!
- 花了一个月的时间在一个oj网站只刷了这些题,从此入门了绝大多数算法
- 数据结构中的6种「树」