Data-Structure-and-Algorithmic

第一阶段按照 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 分类刷定期复习,重做之前刷过的题

刷题方法:

第一遍:可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。

第二遍:先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。

第三遍:提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。定期总结:按照题目类型进行总结:针对一类问题,总结有哪些解题方法,哪种方法是最优的,为什么。总结重点:有些题你刷了好多遍都还是不会,那就要重点关注,多思考解决方法,不断练习强结合图解刷题:有些人认为刷题比较枯燥,比较抽象。那你可以结合动画图解刷题。**

算法工具网站

在线模拟环境

在线书籍

1 入门系列---这些书籍通过图片、打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现,但是看过以下这些书对于之后实现算法打下坚实的思维基础

  • 啊哈!算法.PDF---本书中涉及到的数据结构有栈、队列、链表、树、并查集、堆和图等;涉及到的算法有排序、枚举、深度和广度优先搜索、图的遍历,当然还有图论中不可以缺少的四种最短路径算法、两种最小生成树算法、割点与割边算法、二分图的最大匹配算法等
  • 算法图解---这本图解书很容易看懂,不枯燥
  • 趣学算法.PDF---非常好的一本书,图解多,思路清晰,不仅讲了问题分析算法设计的过程,还讲了如何优化算法
  • 大话数据结构
  • 学习算法** 修炼编程内功视频---这样精致的课程很难找到第二个

2 基础系列---通过基本入门算法书的调教,你已经逐渐体会到了算法的魅力,现在正是时候去阅读基础系列踏入算法的领域

  • 算法导论.pdf---本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受
  • 数据结构与算法 Java版
  • 数据结构与算法:Python语言描述
  • 学习JavaScrit数据结构与算法(第2版)
  • 数据结构与算法分析:C语言描述(原书第2版)
  • 数据结构与算法分析:C++描述(第3版)

3 进阶系列---想要参加面试,那就需要阅读以下书籍进行准备了

4 高手系列

从逻辑上分,数据结构分为线性和非线性两大类。

线性数据结构包括数组、链表、栈、队列。

非线性结构包括树、哈希表、堆、图。**

image image


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上很火的算法可视化项目---在线动态演示算法的网站,可以很清楚的看到算法运行的整个过程
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 专门为刚开始刷题的同学准备的算法基地 洛谷---为广大算法竞赛选手、程序设计爱好者以及院校企业机构提供算法题库、社区、训练工具、在线教育为一体的解决方案,国内著名的题库与社区

Online Judge System(OJ)---在线判题系统

各家的在线判题系统---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-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 [无代码]
--- ---
--- ---

第三篇 算法篇

第十六章 基本算法**
枚举算法**
模拟算法**
递推算法**
递归算法**
分治算法**
概率算法**
贪心算法**
动态规划算法**
排序算法**
试探算法**
二分算法**
倍增算法**
构造算法**
前缀和 & 差分算法**
--- ---
第十七章 程序员常用算法
递归算法
一篇总结带你彻底搞透回溯算法
顺序查找算法
二分查找算法(非递归)
---二分专题(上)
---二分专题(下)
14-1-1 二分查找算法(非递归)的应用场景
14-1-2 二分查找算法(非递归)的解决方案的基本步骤
14-1-3 二分查找算法(非递归)的代码实现
14-1-4 二分查找算法(非递归)的时间复杂度
11-1-5 二分查找算法(非递归)的空间复杂度
分治算法
---用分治法求数组中的最值 分治算法的一个简单应用
动态规划算法
枚举算法
贪心算法
KMP算法---字符串
---亲身体验一下KMP算法 KMP快速字符串查找算法
普里姆算法---图
RSA加密算法原理
克鲁斯卡尔算法---图
迪杰斯特拉算法---图
弗洛伊德算法---图
马踏棋盘算法
贝尔曼-福特算法---图
k-Means算法---图
欧几里得算法
近拟算法
数论算法
图算法
图像处理算法
B62 序列号生成算法 文章
修剪与搜索算法
计算几何算法
问题转换算法
并行算法
安全算法
推荐算法
遗传算法
分布式算法
数据挖掘10大算法
网络流算法
漏桶算法
令牌桶算法
分布式一致性算法:Raft OR raft 图解 (秒懂)---疯狂创客圈
分布式一致性算法:Paxos OR Paxos 图解 (秒懂)---疯狂创客圈
空间定位算法
--- ---

第四篇 专题篇

专题类型
Pattern: Sliding Window---滑动窗口类型
Pattern: Two Pointers---双指针类型
Pattern: Fast & Slow pointers---快慢指针类型
Pattern: Merge Intervals---区间合并类型
Pattern: Cyclic Sort---循环排序
Pattern: In-place Reversal of a LinkedList---链表翻转
Pattern: Tree Breadth First Search---树上的BFS
Pattern: Tree Depth First Search---树上的DFS
Pattern: Two Heaps---双堆类型
Pattern: Subsets---子集类型,一般都是使用多重DFS
Pattern: Modified Binary Search---改造过的二分
Pattern: Top 'K' Elements---前K个系列
Pattern: K-way merge---多路归并
Pattern : 0/1 Knapsack (Dynamic Programming)---0/1背包类型
Pattern: Topological Sort (Graph)---拓扑排序类型
布隆过滤器专题
小岛问题专题
最大公约数专题
蓄水池抽样专题
二分法专题
日程安排表专题
Pattern: Bitwise XOR
--- ---

参考资料

我的第一本算法书.pdf 尚硅谷 韩顺平 图解JAVA数据结构和算法.pdf 算法设计.pdf 图解算法.pdf 算法基础 第5版.pdf 趣学算法.pdf 算法图解.pdf java常用算法手册 第三版本.pdf 算法问题实战策略.pdf (很多题目练习) 天qing2019数据结构.pdf

有用的参考qing

数据结构

  • 数学数据结构

  • 4种逻辑结构

    • 1. 集合结构

    • 2. 线性结构

      • 数组

      • 线性表

        • 线性表的基本操作
        • 线性表的顺序存储结构
        • 线性表的链式存储结构
          • 单链表
          • 静态链表
          • 双向链表
          • 环链表
        • 线性表的分析
          • 线性表的实现分析
          • 线性表的功能
      • 矩阵

      • 栈与队列

          • 栈的常用操作
          • 栈的顺序存储结构
          • 栈的链式存储结构
          • 两栈共享空间
          • Java集合中的栈
        • 队列
        • 串的存储结构
      • 散列

        • 散列的概念
    • 3. 树型结构

        • 树的概述
          • 树的存储结构
            • 树的链表存储
        • 树的基本操作
        • 父节点表示法
        • 子节点表示法
      • 二叉树
        • 二叉树的基本操作
        • 二叉树的顺序存储
        • 二叉树二叉链表存储
        • 二叉树的三叉链表存储
        • 遍历二叉树
          • 先序遍历
          • 中序遍历
          • 后序遍历
          • 广度优先(按层)遍历
        • 排序二叉树
        • 红黑树
      • 森林
      • 转换方法
        • 森林 树和二叉树的转换
      • 哈夫曼树
        • 哈夫曼树的概念
    • 4. 图型结构

        • 图的存储结构
        • 图的遍历
  • 物理结构

    • 顺序存储结构
    • 链式存储结构
  • 排序

  • 查找

算法

leetCode视频

算法公众号

微信号:labuladong

刷题目录

https://github.com/CyC2018/CS-Notes/b...

推荐的学习频道👍🏻

Youtube :Back To Back SWE

https://www.youtube.com/channel/UCmJz...

B站:

  1. 花花酱

https://www.youtube.com/c/HuaHuaLeetCode/videos

花花酱youtube传送门: https://www.youtube.com/c/HuaHuaLeetCode/videos

  1. 小Q刷题

https://space.bilibili.com/149758?fro...

3.绵羊教授

https://space.bilibili.com/354892788?...

绵羊教授youtube传送门: https://www.youtube.com/channel/UCB7X04ICYJ_LMyFN3045wPw

算法视频

参考书籍