图类算法题使用邻接矩阵还是邻接链表——邻接矩阵和邻接链表的优缺点以及初始化代码

邻接矩阵的优缺点

优点

  • 判断是否邻接效率高

缺点

  • 在稀疏的情况耗费空间
  • 构造的过程耗费时间,为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);
	        }

你可能感兴趣的:(算法,数据结构,面试,链表,算法,图论)