zoukankan      html  css  js  c++  java
  • LeetCode 542. 01 矩阵

    我的LeetCode:https://leetcode-cn.com/u/ituring/

    我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii

    LeetCode 542. 01 矩阵

    题目

    给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。

    两个相邻元素间的距离为 1 。

    示例 1:

    输入:
    
    0 0 0
    0 1 0
    0 0 0
    输出:
    
    0 0 0
    0 1 0
    0 0 0
    

    示例 2:

    输入:
    
    0 0 0
    0 1 0
    1 1 1
    输出:
    
    0 0 0
    0 1 0
    1 2 1
    

    注意:

    • 给定矩阵的元素个数不超过 10000。
    • 给定矩阵中至少有一个元素是 0。
    • 矩阵中的元素只在四个方向上相邻: 上、下、左、右。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/01-matrix
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路

    本题比较直接想到的是BFS和DFS,另外还有dp不容易想到;
    图解:

    思路1-BFS

    • 把所有的0位置当作同源起始搜索位置往内层bfs;

    算法复杂度:(N为数组的元素总数)

    • 时间复杂度: $ {color{Magenta}{Omicronleft(N ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(N ight)}} $

    思路2-DFS

    • 把最外层的1当作DFS的同源起始位置,可以减少递归栈的深度,因为BFS时外层的0只会做一次判断,但是DFS时,外层的0会互相进入递归,而这样的递归是无意义的;

    算法复杂度:(N为数组的元素总数)

    • 时间复杂度: $ {color{Magenta}{Omicronleft(N ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(N ight)}} $

    思路3-dp动态规划,从左上角到右下角往复扫描一次

    • 第一次扫描遇到非0位置先给最大路径,然后再左上收敛;
    • 第二次扫描从右下再收敛一遍;

    算法复杂度:(N为数组的元素总数)

    • 时间复杂度: $ {color{Magenta}{Omicronleft(N ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(1 ight)}} $

    算法源码示例

  • 相关阅读:
    Outlook同步问题
    Excel下三角图解的绘制
    数据库,SQL,万恶之源?
    新年第一篇
    ArcGIS的GeoProcessing的原理及实现(1)
    如何在多个文件中查找需要的信息
    关于GIS门户(GIS Portal)的概念
    2004总结
    MapViewControl更新
    GCDPlot 0.22 介绍
  • 原文地址:https://www.cnblogs.com/izhoujie/p/12708457.html
Copyright © 2011-2022 走看看