图
图的定义:
两种方法实现图结构:1. 使用使用临界表 adj list。key 是每个节点, value 是 list of neighbors 或者 set of neighbors
图与二叉树的区别在于,图中节点的邻居的邻居可能是这个节点自己本身。而二叉树的邻居节点只能是自己的儿子。计算机当然不能存储一个图形,所以图只能靠别的数据结构来存储。
存储图的方式有两种:1. 邻接矩阵;2. 邻接表
邻接矩阵的缺点是会消耗很大的空间,而且里面有很多0,。所以一般是邻接表来存储图。邻接表的结构如下:
[
[1],
[0,2,3],
[1],
[1]
]
表中第i个矩阵表示第i个点相连的其他点。实现邻接表的方式是自己定义一个class来实现。代码如下:
class GraphNode {
int val;
ArrayList<GraphNode> adj;
}
如果利用java中现成的数据结构,可以用HashMap 和 HashSet 来实现:
HashMap<T, Set<T>> adj = new HashMap<T, HashSet<T>>()
Subarray Sum: 前缀和数组。作用是能够迅速计算中间多少个数之和。构造这个prefix sum数组耗费O(N)的时间和 O(N)的空间。但是如果需要多次计算中间多少个数之和,用这种方法是最方便的。
扫描二维码关注公众号,回复:
1779829 查看本文章
Maximum Subarray Sum:利用subarray sum,只找最小值。Minimum Subarray:只需将所有数变成相反数。
Subarray Sum/ Subarray Sum Closest.