目录
学习路线整理
新的改变
以前学习算法太过粗糙,感觉都是学得不够仔细,得好好认真去学习。有了这块功底,程序员好比就是习武之人打通任督二脉一样。往后都使用c++进行编写吧。。。。
线性结构
数组和排序
数组其实就是同一个元素在一个空间内进行连续储蓄的一种线性数据结构。
优点,主要是查找快速,由下标0开始,直接索引得到元素
缺点,插入数据时,需要多后面多个元素进行操作,操作不灵活。
数组排序类算法整理
冒泡排序
插入排序
选择排序
希尔排序
快速排序
归并排序
堆排序
桶排序
数组排序类算法的刷题
2500. 删除每行中的最大值
169.多数元素
217.存在重复元素
249.两个数组的交集
1460. 通过翻转子数组使两个数组相等
15.三数之和
179.最大数
75.颜色分类
268.丢失的数字
16. 最接近的三数之和
字符串处理
字符串其实就是char的数组。
字符串处理算法刷题
28. 找出字符串中第一个匹配项的下标
58.最后一个单词的长度
8.字符串转换整数
数组的查找算法
链式数据结构
链式结构也是线性结构的一种,和数组最大的区别就是,数组存储内存是连续的而链表是不连续的。这里优缺点显而易见,容易修改,比如把一个元素从链表中删除,不需要移动数组上面的每一个元素,只需要修改链表上面的指针指向,再使用指令回收掉对应链表元素的内存即可。我们每次读取上面的元素的时候,必须要从第一个开始去进行遍历。
单链表
结构很简单,就是每一个元素一个字段保存值,一个字段保存下一个元素地址的指针。
双链表
和单链表的区别就是每个元素多一个多一个指针指向上一个元素。
循环单双链表
就是单链表和双链表理解头元素和结尾元素的版本
链表算法的刷题
19.删除链表的倒数第 N 个结点
2. 两数相加
21. 合并两个有序链表
链表和数组的结合----散列式结构
树形结构
图结构
算法思想
迭代法刷题
分治法刷题
递归刷题
动态规划刷题
1137. 第 N 个泰波那契数
746. 使用最小花费爬楼梯
198. 打家劫舍
62. 不同路径
回溯刷题
贪心算法刷题
3D数学基础
下面这些还在待整理
哈希表/散列表 (Hash Table)
散列函数
碰撞解决
字符串算法
排序
查找
BF算法
KMP算法
BM算法
正则表达式
数据压缩
树
二叉树
二叉查找树
伸展树(splay tree 分裂树)
平衡二叉树AVL
红黑树
B树,B+,B*
R树
Trie树(前缀树)
后缀树
最优二叉树(赫夫曼树)
二叉堆 (大根堆,小根堆)
二项树
二项堆
斐波那契堆(Fibonacci Heap)
图的算法
图的存储结构和基本操作(建立,遍历,删除节点,添加节点)
最小生成树
拓扑排序
关键路径
最短路径: Floyd,Dijkstra,bellman-ford,spfa
交换排序算法
查找算法
顺序表查找:顺序查找
有序表查找:二分查找
分块查找: 块内无序,块之间有序;可以先二分查找定位到块,然后再到块中顺序查找
动态查找: 二叉排序树,AVL树,B- ,B+ (这里之所以叫 动态查找表,是因为表结构是查找的过程中动态生成的)
哈希表: O(1)
15个经典基础算法
Hash
快速排序
快递选择SELECT
BFS/DFS (广度/深度优先遍历)
红黑树 (一种自平衡的二叉查找树)
KMP 字符串匹配算法
DP (动态规划 dynamic programming)
A*寻路算法: 求解最短路径
Dijkstra:最短路径算法 (八卦下:Dijkstra是荷兰的计算机科学家,提出”信号量和PV原语“,“解决哲学家就餐问题”,”死锁“也是它提出来的)
遗传算法
启发式搜索
图像特征提取之SIFT算法
傅立叶变换
SPFA(shortest path faster algorithm) 单元最短路径算法
海量数据处理
Hash映射/分而治之
Bitmap
Bloom filter(布隆过滤器)
Trie树
数据库索引
倒排索引(Inverted Index)
双层桶划分
外排序
simhash算法
分布处理之Mapreduce
算法设计思想
算法题目选编
这是一个算法题目合集,题目是我从网络和书籍之中整理而来,部分题目已经做了思路整理。问题分类包括:
字符串
堆和栈
链表
数值问题
数组和数列问题
矩阵问题
二叉树
图
海量数据处理
智力思维训练
系统设计