162-矩阵归零

给定一个m×n矩阵,如果一个元素是0,则将其所在行和列全部元素变成0。

需要在原矩阵上完成操作。

样例

给出一个矩阵

[

[1, 2],

[0, 3]

]

返回

[

[0, 2],

[0, 0]

]

挑战

你是否使用了额外的空间?

  • 一个直接的解决方案是使用 O(MN) 的额外空间,但这并不是一个好的方案。
  • 一个简单的改进方案是使用 O(M + N) 的额外空间,但这仍然不是最好的解决方案。

你能想出一个常数空间的解决方案吗?

标签

Cracking The Coding Interview 矩阵

思路

若点 (i , j) 为0,则可以把 (i , 0) ,(0 , j) 标记为 0,最后根据该标记把列和行设置为 0,这样的设置会影响第 1 行和第 1 列,所以要先判断第 1 行和第 1 列是否包含 0,若包含 0,单独置第 1 行或第 1 列为0。

code

class Solution {
public:
/*
* @param matrix: An integer
* @return:
*/ void setZeroes(vector<vector<int>>& matrix) {
// write your code here
int sizeRow = matrix.size();
if (sizeRow <= 0) {
return;
}
int sizeCol = matrix[0].size(), i = 0, j = 0;
bool firRow = false, firCol = false;
// 检测第 1 行是否含0
for (i = 0; i < sizeCol; i++) {
if (matrix[0][i] == 0) {
firRow = true;
break;
}
}
// 检测第 1 列是否含0
for (i = 0; i < sizeRow; i++) {
if (matrix[i][0] == 0) {
firCol = true;
break;
}
}
// 若点 (i , j) 为0,则可以把 (i , 0) ,(0 , j) 标记为 0
for (i = 1; i < sizeRow; i++) {
for (j = 1; j < sizeCol; j++) {
if (matrix[i][j] == 0) {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
// 根据 (i , 0) ,(0 , j) 的值,单独设置某行或某列为 0
for (i = 1; i < sizeCol; i++) {
if (matrix[0][i] == 0) {
for (j = 1; j < sizeRow; j++) {
matrix[j][i] = 0;
}
}
}
for (i = 1; i < sizeRow; i++) {
if (matrix[i][0] == 0) {
for (j = 1; j < sizeCol; j++) {
matrix[i][j] = 0;
}
}
}
// 第 1 行包含 0,置第 1 行全为 0
if (firRow == true) {
for (j = 0; j < sizeCol; j++) {
matrix[0][j] = 0;
}
}
// 第 1 列包含 0,置第 1 列全为 0
if (firCol == true) {
for (j = 0; j < sizeRow; j++) {
matrix[j][0] = 0;
}
}
}
};

lintcode-162-矩阵归零的更多相关文章

  1. OpenJudge计算概论-矩阵归零消减序列和

    矩阵归零消减序列和 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个n*n的矩阵( <= n <= ,元素的值都是非负整数).通过n-1次实施下述过程,可把这个矩阵转 ...

  2. 投入OJ的怀抱~~~~~~~~~~

    OpenJudge C20182024 信箱(1) 账号 修改设定 退出小组 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61910 ...

  3. noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T01——T10

    T01 矩阵交换行 描述 给定一个5*5的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果. 输入 输入共6行,前5行为矩阵的每一行元素,元 ...

  4. NumPy-矩阵部分

    NumPy-矩阵部分 [TOC] NumPy 简介 numpy可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多. 安装NumPy pi ...

  5. 学习笔记CB012: LSTM 简单实现、完整实现、torch、小说训练word2vec lstm机器人

    真正掌握一种算法,最实际的方法,完全手写出来. LSTM(Long Short Tem Memory)特殊递归神经网络,神经元保存历史记忆,解决自然语言处理统计方法只能考虑最近n个词语而忽略更久前词语 ...

  6. lintcode-185-矩阵的之字型遍历

    185-矩阵的之字型遍历 给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历. 样例 对于如下矩阵: [ [1, 2, 3, 4], [5, 6, 7, 8], [9 ...

  7. lintcode:Matrix Zigzag Traversal 矩阵的之字型遍历

    题目: 矩阵的之字型遍历 给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历. 样例 对于如下矩阵: [ [1, 2, 3, 4], [5, 6, 7, 8], [9 ...

  8. lintcode:搜索二维矩阵II

    题目 搜索二维矩阵 II 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没 ...

  9. lintcode :搜索二维矩阵

    题目: 搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每行的第一个数大于上一行的最后一个整数. 样例 考虑下列矩阵: [ [1 ...

  10. (二分查找 拓展) leetcode 162. Find Peak Element && lintcode 75. Find Peak Element

    A peak element is an element that is greater than its neighbors. Given an input array nums, where nu ...

随机推荐

  1. 数据库5.7-jdbc版本8.0.12驱动连接

    现在版本的jdbc连接方式和原来不一样了, 假如你使用String driver = "com.mysql.jdbc.Driver"; 会抛出错误: Loading class ` ...

  2. HTML学习日记之元信息meta标记

    所谓meta标记就是用来描述一个HTML网页文档的属性,也称为元信息,这些信息并不会显示在浏览器的页面中,例如作者.日期和时间.网页描述.页面刷新等. 基本语法: <meta name = &q ...

  3. python--模块之sys与python解释器交互模块

    作用:sys模块是与python解释器交互的一个接口.它提供了一系列有关python运行环境的变量和函数. 常用函数:import sys sys.argv #命令行参数list,第一个元素是程序本身 ...

  4. Django图书管理系统(单表操作)

    以下内容需要掌握: Python3 以及前端:HTML,CSS,jQuery,BootStrap,Django,JavaScript 开启Django新项目: 1,settings.py 数据库选择: ...

  5. gsl 复数

    一.复数的表示 复数的两种表示: gsl复数结构的声明和部分宏在gsl_complex.h中,方法的声明和另一部分宏在gsl_complex_math.h.复数的表示(结构)有三种,即float型.d ...

  6. 15-oauth2+oidc实现Server部分

    1-我们使用之前项目的mvcCookieAuthSampe2进行改造 1.1  增加IdentityServer4 2-增加Config.cs文件,对IdentityServer提供相关的配置数据 u ...

  7. 为什么我要放弃javaScript数据结构与算法(第十一章)—— 算法模式

    本章将会学习递归.动态规划和贪心算法. 第十一章 算法模式 递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题.递归通常涉及函数调用自身. 递归函数是像下面能够直接调用自身的 ...

  8. HDL代码风格建议(1)使用示例和IP

    Recommended HDL Coding Styles HDL coding styles can have a significant effect on the quality of resu ...

  9. 全国Uber优步司机奖励政策 (1月25日-1月31日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  10. 苏州Uber优步司机奖励政策(12月28日到1月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...