• LeetCode:矩阵置零【73】


    LeetCode:矩阵置零【73】

    题目描述

    给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。

    示例 1:

    输入: 
    [
      [1,1,1],
      [1,0,1],
      [1,1,1]
    ]
    输出: 
    [
      [1,0,1],
      [0,0,0],
      [1,0,1]
    ]
    

    示例 2:

    输入: 
    [
      [0,1,2,0],
      [3,4,5,2],
      [1,3,1,5]
    ]
    输出: 
    [
      [0,0,0,0],
      [0,4,5,0],
      [0,3,1,0]
    ]

    进阶:

    • 一个直接的解决方案是使用  O(mn) 的额外空间,但这并不是一个好的解决方案。
    • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
    • 你能想出一个常数空间的解决方案吗?

    题目分析

      关于进阶的内容,大家可以思考,这里也给出大家官方的题解:

    LeetCode官方题解:https://leetcode.com/articles/set-matrix-zeroes/

      这道题能总而言之,不能想当然的认为,在处理过程中需要处理所有的新生成的零。那么的直观思路就遍历两边数组,第一遍是用HashSet去记录每个0点的横纵坐标,然后第二遍循环再把那些在已记录的行或列上的元素全部赋值为0即可。

    Java题解

    package arr;
    
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Set;
    
    public class SetMatrixZeroes_73 {
        public void setZeroes(int[][] matrix) {
            int R = matrix.length;
            int C = matrix[0].length;
            Set<Integer> rows = new HashSet<Integer>();
            Set<Integer> cols = new HashSet<Integer>();
    
            for (int i = 0; i < R; i++) {
                for (int j = 0; j < C; j++) {
                    if (matrix[i][j] == 0) {
                        rows.add(i);
                        cols.add(j);
                    }
                }
            }
    
            for (int i = 0; i < R; i++) {
                for (int j = 0; j < C; j++) {
                    if (rows.contains(i) || cols.contains(j)) {
                        matrix[i][j] = 0;
                    }
                }
            }
        }
    }
    

      

  • 相关阅读:
    java基础篇2之枚举
    java基础篇1之可变参数,增强for循环,自动装箱
    计算机常用英语
    ThreadLocal
    Tomcat 配置连接池
    数据库连接池
    装饰者模式
    JavaWeb 之事务
    MySql 批处理
    如何将大数据保存到 MySql 数据库
  • 原文地址:https://www.cnblogs.com/MrSaver/p/9899100.html
Copyright © 2020-2023  润新知