GithubHelp home page GithubHelp logo

data-structure-and-algorithmic's Introduction

02

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

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

各家的在线判题系统---POJ是ACM选手首选OJ,输入模式也是ACM模式

FB面试官揭秘算法面试速成技巧 — 怎样做到 Bug Free 和刷100题等于别人刷300题 LeetCode 算法面试题解

目录

数据之间的关系有 3 种,分别是 "一对一"、"一对多" 和 "多对多",前两种关系的数据可分别用线性表和树结构存储,后一种"多对多"逻辑关系数据的结构——图存储结构

数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树

第二篇 数据结构篇

|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 图解 (秒懂)---疯狂创客圈
空间定位算法
--- ---

第四篇 专题篇

专题类型
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

算法视频

参考书籍

data-structure-and-algorithmic's People

Contributors

stevenli91748 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

data-structure-and-algorithmic's Issues

leetcode刷题方式确认

image

你好,你说按tag刷题,然后说是刷了200道题,请问是每个tag刷了200道题 还是 一共刷了200道题呢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.