zoukankan      html  css  js  c++  java
  • 【中级算法】2.矩阵置零

    题目:

    给定一个 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) 的额外空间,但这仍然不是最好的解决方案。
    你能想出一个常数空间的解决方案吗?

    解题思路:

    0(M+n)的额外空间算法比较容易实现,实现代码如下:

    class Solution {
    public:
        void setZeroes(vector<vector<int>>& matrix) {
            int row = matrix.size();
            int colum = matrix[0].size();
            vector<bool> zero_row(row,false);
            vector<bool> zero_colum(colum,false);
            
            for(int i = 0; i < row; ++i){
                for(int j = 0;j < colum; ++j){
                    if(matrix[i][j] == 0){
                        zero_row[i] = true;
                        zero_colum[j] = true;
                    }
                }
            }
            
            for(int i = 0; i < row; ++i){
                for(int j = 0;j < colum; ++j){
                    if(zero_row[i]||zero_colum[j]){
                        matrix[i][j] = 0;
                    }
                }
            }
        }
    };
  • 相关阅读:
    33 函数参数的传递方式
    33 函数递归调用
    32 头文件
    31 函数
    30 枚举
    centos6.5升级默认的Mysql到5.5方法
    Centos6.5命令行快捷键
    redhat 安装lamp
    CentOS6.5中的vsftpd安装配置
    添加一个用户并且让用户获得root权限
  • 原文地址:https://www.cnblogs.com/mikemeng/p/9020582.html
Copyright © 2011-2022 走看看