【Java】力扣_每日一题_542. 01 矩阵_中等

给定一个由 0 和 1 组成的矩阵,找出每个元... 该题目首先我想到的算法是bfs,但是bfs的空间复杂度较高,需要额外的队列,在看完题解之后,发现了动态规划这个好办法。具体程序代码如下: 复制代码 vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) { int m = matrix.size(), n =... 阅读详情

题目链接:https://leetcode-cn.com/problems/01-matrix/

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

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

第一次编辑代码:

class Solution {
    public int[][] updateMatrix(int[][] matrix) {
        int row = matrix.length;
        int col = matrix[0].length;
        int[][] ans = new int[row][col];
        for(int i = 0; i < row; i++)
            for(int j = 0; j < col; j++){
                ans[i][j] = find(matrix,i,j,row,col);
            }
        return ans;
    }

    public int find(int[][] matrix, int i, int j, int row, int col){
        if(i < 0 || i > row-1 || j < 0 || j > col-1)
            return Integer.MAX_VALUE;

        if(matrix[i][j] == 0)
            return 0;

        if(i-1 >= 0 && matrix[i-1][j] == 0)
            return 1;
        if(i+1 <= row-1 && matrix[i+1][j] == 0)
            return 1;
        if(j-1 >= 0 && matrix[i][j-1] == 0)
            return 1;
        if(j+1 <= col-1 && matrix[i][j+1] == 0)
            return 1;

        return 1 + Math.min(
            Math.min(find(matrix,i-1,j,row,col),find(matrix,i+1,j,row,col)),
            Math.min(find(matrix,i,j+1,row,col),find(matrix,i,j+1,row,col))
            );
    }
}

提交结果
执行出错。
栈溢出。

反思
考虑使用多源点广度优先遍历。

第二次编辑代码:

class Solution {
    public int[][] updateMatrix(int[][] matrix) {

        int row = matrix.length, col = matrix[0].length;
        Queue<int[]> queue = new LinkedList<>();

        for(int i = 0; i < row; i++)
            for(int j = 0; j < col; j++){
                if(matrix[i][j] == 0){
                    queue.offer(new int[]{i,j});
                }else{
                    matrix[i][j] = -1;
                }
            }

        int[] dx = new int[]{-1, 1, 0, 0};
        int[] dy = new int[]{0, 0, -1, 1};
        while(!queue.isEmpty()){
            int[] cur = queue.poll();
            int x = cur[0], y = cur[1];
            for(int i = 0; i < 4; i++){
                int newX = x + dx[i];
                int newY = y + dy[i];
                if(newX >= 0 && newX < row && newY >= 0 && newY < col 
                && matrix[newX][newY] == -1){
                    matrix[newX][newY] = matrix[x][y] + 1;
                    queue.offer(new int[]{newX,newY});
                }
            }
        }

        return matrix;
    }
}
『力扣刷题』542_01矩阵 解题代码 LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 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 注... 阅读详情

相关推荐

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

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 (Leetcode 542) 两个相邻元素间的距离为 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。 给定矩阵中至少有一个...

Jack‘s Blog 1万+

【leetcode】542. 01 矩阵

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 2: 输入: 0 0 0 0 1 0 1 1 1 输出: 0 0 0 0 1 0 1 2 1 思路:广度优先遍历bfs,一般题目的字眼是“最短的步数”、“最小的距离”。 深搜dfs是“某一解”。 首先找到给定节点,判断它是否为0,这个初始节点当作第0层,此时dista...

littlemichelle 300

力扣542.01矩阵【中等】

看题解之前,只想到了从一开始的广搜,每日一遍自己真菜,使用广搜+队列解决问题,不过并不是从1开始搜索,而是从所有的0开始,因为从1开始一次广搜只能找到一个点的最短路径,而从0开始,碰到路径比当前路径长的都可以被优化。 给定一个由 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

luluxiu_1999的博客 384

LeetCode---542.01矩阵

题目连接:https://leetcode-cn.com/problems/01-matrix/ 题目 542. 01矩阵 难度:中等 给定一个由0和1组成的矩阵,找出每个元素到最近的0的距离。 两个相邻元素间的距离为1。 示例: 思路解析: 找到每个1到最近的0的距离。 1,首先考虑整个矩阵只有一个0的情况,那么设这个0的位置为(ni,nj),那么关于每个位置为(i,j)的1,它到这个0的位置为|i-ni|+|j-nj|。 2,再考虑整个矩阵有多个0的情...

a15387091481的博客 364

Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)

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。 给定矩阵中至少有一个元素是...

南 墙 1万+

mipi协议中的calibration和scramble模式

在MIPI(Mobile Industry Processor Interface)协议中,calibration(校准)和scramble(加扰)模式是两个重要的特性,它们分别用于优化数据传输的准确性和减少信号干扰。

flomingo1的专栏 2397

542. 01 矩阵 每日一题 Java

542. 01 矩阵 以前用C++做过类似的题,当时的思路也是bfs,不过这一次直接将未标记的位置标记为r+c,这个值是不可能达到,这样就省下了一个位图矩阵的空间。 package updateMatrix; import java.util.LinkedList; import java.util.Queue; public class Solution { public stati...

Cyan1956的博客 270

SEMI E40标准的加工任务状态模型(Process Job State Model)解析

半导体制造设备的自动化控制离不开对加工任务(Process Job)的精细管理。SEMI E40标准定义了加工任务的全生命周期状态模型。分层建模,支持嵌套与并发子状态,确保复杂流程的灵活控制。SEMI E40通过。

bengg123的博客 1772

Rayman的绝顶之路——Leetcode每日一题打卡1

Leetcode542. 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 注意: 给定矩阵的元素个数不超...

巫魔灵的博客 336

基于SECS协议开发的简明教程(1)

SEMI SECS MES E4 E5 E30 E37 HSMS SDK

L251210269的专栏 7628

驱动兼容_FANUC 驱动器兼容问题探讨

近10年来,FANUC伺服驱动器随着系统的升级而升级,不同的系统,可以兼容很多种类的驱动器,作者做了一些常见经验总结如下表:电源模块伺服放大器主轴放大器bi一体18i/OIB/OIC6110-Hxxx6114-Hxxx6111-Hxxx6134-Hxxx31iA/OID6140-Hxxx6117-Hxxx6141-Hxxx6164-Hxxx31IB/35IB/OIF/OI MATE D(5包)62...

weixin_34420941的博客 1751

542. 01 Matrix(Leetcode每日一题-2020.04.15)

Problem Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell. The distance between two adjacent cells is 1. Example1 Input: [[0,0,0], [0,1,0], [0,0,0]] Output: [[0,0,0...

Bryan要加油 481

LVGL 9.4 性能调优实战:如何通过脏区合并与tile分块,让你的嵌入式UI流畅度翻倍

本文深入探讨LVGL 9.4中的性能优化技术,重点介绍脏区合并与tile分块如何显著提升嵌入式UI流畅度。通过实战案例和源码分析,详细解析局部刷新策略、显示框架调优及性能瓶颈诊断方法,帮助开发者在STM32、ESP32等资源受限设备上实现丝滑的UI体验。

weixin_28678831的博客 450

力扣算法java实现汇总整理(上)

记录汇总力扣热门经典算法java实现过程

工匠精神coding,终生学习 540

为分析表明卡诺电池技术(或热泵式储电技术)-是目前最佳的储能技术!!!-2021年

卡诺电池(Carnot Battery)是一种基于热力学循环的储能技术,其核心原理是通过热力循环将电能转化为热能存储,并在需要时将热能重新转换为电能输出。这种技术得名于热力学中的卡诺循环原理,由法国工程师卡诺于1824年提出。

qq_15963745的博客 654

使用静态库在嵌入式系统中进行开发

静态库是一种包含预编译对象代码的文件,它可以与应用程序链接在一起,并在编译时将库的代码复制到最终的可执行文件中。静态库是包含预编译对象代码的文件,可以与应用程序链接在一起,并在编译时将库的代码复制到最终的可执行文件中。需要注意的是,由于嵌入式系统的资源限制,开发人员应该仔细选择需要包含在静态库中的功能,并避免引入不必要的依赖关系。需要注意的是,由于嵌入式系统的资源限制,开发人员应该仔细选择需要包含在静态库中的功能,并避免引入不必要的依赖关系。的静态库文件,可以在嵌入式系统的应用程序中使用它了。

ZrElixir的博客 201

力扣刷题-542.01矩阵

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 注意:   给定矩阵的元素个数不超过 10000。   给定矩阵中至少有一个元素是 0。  矩阵中的元素只在四个方向上相邻: 上、下、左、右。 题目分析 求最短距离   求最短距离,一般采用广度优先搜索的算法,从源点出发,最先遍历到的目标点,一定是距离源点最短的点,遍历增加一层则距离加1...

编程猿来如此 493

【100%通过率】华为机试真题 Python 实现【对称美学】【2022.11 Q4 新题】

对称就是最大的美学,现有一道关于对称字符串的美学。 已知: 第1个字符串:R 第2个字符串:BR 第3个字符串:RBBR 第4个字符串:BRRBRBBR 第5个字符串:RBBRBRRBBRRBRBBR相信你已经发现规律了,没错! 就是第i个字符串=第i-1号字符串的取反+第i-1号字符串。取反即(R->B,B->R); 现在告诉你n和k,让你求得第n个字符串的第k个字符是多少。(k的编号从0开始)

MISAYAONE的博客 1万+

01矩阵

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 0 思路 BFS;通过viiste数组标记元素是否访问过;将元素为0全部入队;标记置为True;然后队列出队;上下左右四个方向进行判断;如果没有访问过;并且合法;说明该值为1,然后将该值标记为...

Lemon 742

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

leetcode【每日一题】01 矩阵 Java

题干 给定一个由 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...

qq_43491066的博客 339

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LeetCode-542、01 矩阵-中等

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 注意: 给定矩阵的元素个数不...

clover_my的博客 321

LeetCode-542. 01 Matrix (JAVA)零一矩阵

LeetCode-542. 01 Matrix (JAVA)零一矩阵

mine_song的博客 3597

leetcode刷题542. 01 矩阵(Java)DFS+BFS+DP

leetcode 542 01矩阵 DFS BFS DP Java 深度优先 广度优先 动态规划

Sueko的博客 479

LeetCode中的01矩阵问题

LeetCode中的01matrix算法,我本来的的思路是将res矩阵中原矩阵为0的位置都填充为0,并且将该位置(x,y坐标,以长度为2的数组形式)保存到一个ArrayList中,然后遍历原矩阵中为1的位置,次过程中还需逃第三层循环遍历ArrayList,找到离该“1”位置最近的“0”位置(两个位置的x上的距离加y上的距离)。这种方法按理是可行的,而且思路很简单,毕竟我是算法小白。问题是三层循环...

dao_lian的博客 3376

01 Matrix

DescriptionSubmissionsSolutions Total Accepted: 3068Total Submissions: 9208Difficulty: MediumContributors:Stomach_ache Given a matrix consists of 0 and 1, find the distan

sinat_28088761的博客 296

leet-code-1-寻找满足数组中和为目标值的两数下标值

1.给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 来源:力扣(LeetCode) package com.example.study; import java.util.Arrays; import java.util.Random; import java.util.Scanner; /** *author:bingbing *日期:2020...

Dream_it_possible!的博客 789
上一篇: 【校招】面试_科大讯飞_Java开发工程师
下一篇: 【Java】力扣_每日一题_56. 合并区间_中等
includei
博客等级 码龄9年 406粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值