leetcode题型分析《图》

1)图的搜索

剑指offer II 105:最大岛屿面积

1 基于队列广度优先搜索解题

step1 找出图的节点和边,将为1的岛屿视为图的节点,上下左右相邻格子为1的节点之间有条边。

step 2 逐一扫描每一个节点,当遇到节点为1,且不在已知岛屿表明到达一个新的岛屿并重新计算岛屿面积。定义一个visited二维数组,存到被访问过的节点。

step 3比较所有岛屿面积,求出面积最大那个。

广度优先搜索具体实现:定义一个queue,首先将起始节点加入队列中,然后取出队列中节点并访问其上下左右相邻节点,如果grid为1且没被访问过,加入队列,以此循环。

f4732dde8b93489680e980451eeb4c79.jpg

2 基于递归深度优先搜索解题

step 1定义area存放计算的岛屿面积,将对应的visited[i][j]置true;

step 2 计算其相邻节点的坐标,如果对应坐标grid为1且visited为false,area += getArea()递归。

2)拓扑排序

指对一个有向无环图的节点进行排序之后得到的序列,它能判断一个图是否有环,常用以解决后一个依赖于前一个节点,是否能完成问题。

步骤:每次从环中取出一个入度为0的节点,添加到拓扑排序序列中,然后删除该节点以及所有以它为起点的边。

剑指offer II 113 课程顺序

分析:将所有课程看成图中节点,将先修课程与后修课程看成图中的边。

step 1 构图,定义map表,key存放修课节点,value list存放依赖于它先修的课程。定义一个数组inDegrees,存放每个节点的入度。

step 2:将入度为0的节点加入queue中,定义一个order存放修课顺序。

step 3, 在while 中,取出队列的值加入修课顺序order中,并将依赖该节点的入度inDegree - 1,当inDegree 为0,将对应节点加入queue,循环,直到queue是空。

step 4 如果修课顺序order大小等于课程数,则为问题的解,能修完。

146f2eeef3834dc190fa34deca98426b.jpg

 

3)并查集

它是一种树形的数据结构,用来表示不相交集合的数据,常用来判断两个元素是否属于同一子集。

合并:将一个子集对应的树的根节点的指针指向另一个子集对应树的根节点。

查找:从元素V对应节点开始沿着指向父节点指针一直找到树的根节点。

剑指offer II 朋友圈

step 1: 定义数组father存放根节点,初始值根节点就是自己本身。

step 2: 遍历节点,如果对应值为1,就寻找父节点,如果父节点不相同的话,就合并。

19aef2a39c264ce2a42e0388c25ca205.jpg

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值