邻接矩阵的优缺点
优点
- 判断是否邻接效率高
缺点
- 在稀疏的情况耗费空间
- 构造的过程耗费时间,为O(N^2)
- 在查找某节点的邻接对象时耗费时间,为O(N^2),且需要一个一个地判断
邻接链表的优缺点
优点
- 在查找某节点的邻接对象时比较快,为O(|E|)
- 构造过程比较快,为O(|E|)
- 占用的空间相对较小
缺点
- 判断两个节点是否邻接比较耗费时间,为O(|E|)
实际题目情况
1042. 不邻接植花
https://leetcode-cn.com/problems/flower-planting-with-no-adjacent/submissions/
这道题在相同思路的情况下:
-
使用邻接矩阵,超时
-
使用邻接链表:
执行用时:18 ms, 在所有 Java 提交中击败了68.28%的用户
内存消耗:48.5 MB, 在所有 Java 提交中击败了73.53%的用户
邻接矩阵初始化代码
来自leetcode题目1042,java,无向图
boolean[][]adj;
adj=new boolean[N][N];
for(int i=0;i<paths.length;i++){
int x=paths[i][0]-1;
int y=paths[i][1]-1;
adj[x][y]=true;
adj[y][x]=true;
}
邻接链表初始化代码
来自leetcode题目1042,java,无向图
List<Integer>[]adj=new List[N];
//初始化邻接链表
for(int i=0;i<N;i++) {
adj[i]=new LinkedList<Integer>();
}
for(int i=0;i<paths.length;i++){
int x=paths[i][0]-1;
int y=paths[i][1]-1;
adj[x].add(y);
adj[y].add(x);
}