青云算法面试题干货-最短的桥-LeetCode第934题

该博客介绍了如何解决LeetCode第934题——最短的桥。通过将二维矩阵视为图,利用广度优先搜索算法寻找两个岛屿之间的最短连接路径,从而求得最少翻转0的数量。文中提供了使用广度优先搜索的解决方案,并分析了算法的时间复杂度为O(mn)。
摘要由CSDN通过智能技术生成

问题:在一个由0、1组成的二维矩阵里,上下左右四个方向相连的1组成岛屿,而其他0的区域表示海洋。如果在矩阵里有两个岛屿,我们可以修建一座桥把两个岛屿连起来。修建桥的办法是把0翻转成上下左右四个方向相连的1。请问至少需要翻转多少个0才能将两个岛屿连起来?例如,在下面的二维矩阵中,我们只需要翻转坐标为(1, 1)和(2, 1)的两个0,或者坐标为(0, 2)和(1, 2)的两个0,就可以把两个岛屿连起来,因此桥的最短长度为2。

[[0, 1, 0],

 [0, 0, 0],

 [0, 0, 1]]

分析:这是LeetCode的934题。

有很多面试题的输入都是0、1组成的二维矩阵,其中上下左右四个方向相连的1组成岛屿。这种类型的题目都可以把二维矩阵看成图,矩阵中的每个数字是图中的节点,而节点与上下左右四个方向的其他节点相连,因此每个节点最多有四条边。

这个题目的输入的矩阵中含有两个岛屿。我们先找出其中任意一个岛屿,然后再求出这个岛屿到另外一个岛屿之间桥的最短长度。

为了找出其中一个岛屿,我们先扫描输入的矩阵找到任意一个1,然后从这个1出发,遍历所有和它相连的1找到它所在岛屿的所有1。这里我们可以使用广度优先搜索或者深度优先搜索算法去遍历岛屿上的所有1。下面的参考代码使用广度优先搜索算法:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值