• leetcode 76:set-matrix-zeros


    题目描述

    给定一个m*n的矩阵,如果有一个元素是0,就把该元素所在的行和列上的元素全置为0,要求使用原地算法。
    拓展:
    你的算法有使用额外的空间吗?
    一种比较直接的算法是利用O(m,n)的空间,但是这不是一个好的解法
    使用简单的改进可以在O(m+n)的空间解决这个问题,但是还不是最佳的解法
    你能在常量级的空间复杂度内解决这个问题吗?
    题目分析:
    创建两个map分别记载矩阵中值为0的行和列(map可去重),然后再遍历这两个map,如果有行和列被标记则把该行该列的元素全置为0。
    代码如下:
     1 void setZeroes(vector<vector<int> > &matrix) {
     2         int m = matrix.size();
     3         int n = matrix[0].size();
     4         map<int,bool> row,col;
     5         for(int i = 0;i < m;i++)
     6         {
     7             for(int j = 0;j < n;j++)
     8             {
     9                 if(matrix[i][j] == 0)
    10                     row[i] = col[j] = true;
    11             }
    12         }
    13         
    14         for(int i = 0;i < m;i++)
    15         {
    16             for(int j = 0;j < n;j++)
    17             {
    18                 if(row[i] || col[j])
    19                     matrix[i][j] = 0;
    20             }
    21         }
    22     }
  • 相关阅读:
    Git—分支管理
    Git—推送代码至Github
    Git入门—创建项目
    Mysql单表查询
    Mysql数据的增删改查
    Mysql完整约束性
    C++继承中同名成员变量处理方法
    C++继承和组合中的构造函数和析构函数调用原则
    C++继承中的类型兼容原则
    C++中的继承
  • 原文地址:https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/13475123.html
Copyright © 2020-2023  润新知