算法爬坑记——图、二叉树、数组、区间

图的定义:

两种方法实现图结构: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. 

猜你喜欢

转载自blog.csdn.net/chichiply/article/details/80638577