coding能力需要每天加强练习~ 剑指offer~ leetcode~
数据结构研究的是数据如何在计算机中组织和存储,使得我们可以高效地获取数据和修改数据。
我们需要根据应用场景的不同,灵活选择最合适的数据结构。
- 线性结构
数组
链表
栈
队列
哈希表
- 树结构
二叉树
二分搜索树
平衡二叉树 AVL
红黑树
平衡树 Treap二叉搜索树和堆合并构成的新数据结构,所以它的名字取了Tree和Heap各一半,叫做Treap。
伸展树 Splay也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由丹尼尔·斯立特Daniel Sleator 和 罗伯特·恩卓·塔扬Robert Endre Tarjan 在1985年发明的。
堆
字典树 Trie:前缀树,解决毫秒级通讯录查询。
线段树 LeetCode相关线段树的问题208、611、277
k-D树 K-D树是把K维空间中的点组织起来的空间划分数据结构,与四叉树不同的是,K-D树对空间的划分不是按照某种固定模式进行的,对空间的划分更有效。
并查集
哈夫曼树
- 图结构
存储方式:邻接矩阵、邻接表
最小生成树 Minimun Span Tree:Prim算法、kruskal算法
最短路径 Shortest Path:Dijkstra算法、Bellman-Ford算法
数组、链表、栈、队列、堆、二分搜索树
线段树、Trie、并查集
平衡二叉树AVL、红黑树、哈希表
-
排序算法
-
寻路算法:图论算法,DFS使用栈、BFS使用队列
-
压缩算法:哈夫曼树
-
位运算:只有5种运算,与、或、异或、左移和右移
图论、计算几何、组合数学、概率以及更复杂的数据结构等。
1.有成熟的时间复杂度为O(n)的算法得到数组中任意第K大数字,Partition
2.把整数右移一位和将整数除以2,在数学上是等价的,但除法的效率比位运算低的多,在实际编程中应尽可能地使用位运算代替乘除法.
3.去符号的方法:a & 0x7fffffff
- 更多数据结构
- 更多算法
点分治与动态点分治 点分树 Tarjan算法是由Robert Tarjan(罗伯特·塔扬,不知有几位大神读对过这个名字) 发明的求有向图中强连通分量的算法。 预备知识:有向图,强连通。
- 《剑指offer》
- 慕课网-刘宇波老师相关课程
- leetcode官网
- 牛客网