给定一个 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) 的额外空间,但这仍然不是最好的解决方案。
  • 你能想出一个常数空间的解决方案吗?
 1 #include "_000库函数.h"
 2
 3
 4 //先使用m*n的额外空间
 5 class Solution {
 6 public:
 7     void setZeroes(vector<vector<int>>& matrix) {
 8         vector<vector<int>>temp = matrix;
 9         for (int i = 0; i < matrix.size(); ++i)
10             for (int j = 0; j < matrix[0].size(); ++j)
11                 if (temp[i][j] == 0) {
12                     for (int t = 0; t < matrix.size(); ++t)
13                         matrix[t][j] = 0;
14                     for (int t = 0; t < matrix[0].size(); ++t)
15                         matrix[i][t] = 0;
16                 }
17     }
18 };
19
20 //使用m+n的额外空间,只需要记录的行和列就行
21 //此处可以再优化一下,不另外开辟空间,使用原矩阵的第一行和第一列来记录就行
22 class Solution {
23 public:
24     void setZeroes(vector<vector<int>>& matrix) {
25         vector<int>r(matrix.size(), 0);//行标记  m
26         vector<int>l(matrix[0].size(), 0);//列标记  n
27         for (int i = 0; i < matrix.size(); ++i)
28             for (int j = 0; j < matrix[0].size(); ++j)
29                 if (matrix[i][j] == 0) {
30                     r[i] = 1;
31                     l[j] = 1;
32                 }
33
34         for (int i = 0; i < matrix.size(); ++i)
35             if (r[i])
36                 for (int j = 0; j < matrix[0].size(); ++j)
37                     matrix[i][j] = 0;
38
39         for (int j = 0; j < matrix[0].size(); ++j)
40             if (l[j])
41                 for (int i = 0; i < matrix.size(); ++i)
42                     matrix[i][j] = 0;
43     }
44
45 };
46 void T073() {
47     Solution s;
48     vector<vector<int>>v;
49     v = { {1,1,1}, {1,0,1},{1,1,1} };
50     s.setZeroes(v);
51     for (auto &a : v) {
52         for (auto b : a)
53             cout << b << "  ";
54         cout << endl;
55     }
56     cout << endl;
57     v = { {0,1,2,0}, {3,4,5,2},{1,3,1,5} };
58     s.setZeroes(v);
59     for (auto &a : v) {
60         for (auto b : a)
61             cout << b << "  ";
62         cout << endl;
63     }
64     cout << endl;
65
66
67 }

转载于:https://www.cnblogs.com/zzw1024/p/10705526.html

力扣算法题—073矩阵置零相关推荐

  1. 程序员面试需要刷力扣算法题吗

    这里写目录标题 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一些特征 1.2. 为什么要考查算法 1.3. 目前面试主要考查 3 类 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一 ...

  2. LeetCode -- 力扣算法题解题心得 -- (个人笔记记录)持续更新~~

    一.前言 正式开启数据结构+算法研究的历程,准备好一年后的面试.下面的解法不一定是最优解,只求能力提升,会定期更新~~ 二.目录 1 2 19 20 21 24 35 42 83 86 94 96 1 ...

  3. 力扣算法题—042接雨水

    1 #include"000库函数.h" 2 //一点头绪都没有 3 //然后就自己按自己的意思来一遍 4 //好像没有用算法 5 //16ms,让我激动一把 6 7 class ...

  4. “宝石与石头”:一道简单却巧妙的力扣算法题

    本篇博客会讲解力扣"771. 宝石与石头"的解题思路,这是题目链接. 先来审题: 以下是输出示例: 以下是提示: 本题可以使用数组模拟哈希表来实现.先把宝石字符串中的字符标识到数组 ...

  5. 力扣算法题-19.秋叶收藏集 C语言实现

    题目 小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片 ...

  6. 力扣算法题,第N个神奇数字(Python)

    878.第N个神奇数字 题目描述: 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + ...

  7. 力扣算法题—074搜索二维矩阵

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...

  8. 力扣算法题—075颜色分类

    给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...

  9. 力扣简单题-柠檬水找零

    题目:在柠檬水摊上,每一杯柠檬水的售价为 5 美元.顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 20 美元.你必 ...

最新文章

  1. RISC-V会彻底改变计算吗?
  2. mysql 创建库设置中文
  3. 23种设计模式及其对应实例-转
  4. kafka笔记3(生产者)
  5. python的全局变量能暂存数据吗_Python 中的全局变量 局部变量
  6. python numpy的部分函数
  7. 划重点!十分钟掌握牛顿法凸优化
  8. 函数没有“as”子句;假定返回类型为 object。_TypeScript笔记(一)类型amp;接口...
  9. 如何通过调试找到自己需要的ABAP增强
  10. 如何排查 .NET 内存泄漏
  11. Leetcode 数据结构与算法题解大全——目录(推荐收藏,持续更新)
  12. XML基本概念及增删改查操作
  13. Java网络编程之NIO编程(待补充)
  14. Android Studio3.2.1升级刨坑记录
  15. 阿里云开源编程马拉松入围项目
  16. (73)信号发生器DDS三角波设计(一)(第15天)
  17. markdownpad2下载安装教程
  18. 如何将java/Android签名工具keytool单独提取出来使用
  19. Java一键生成PDF合同以及骑缝章、盖章处的精准盖章
  20. UVALive 6437

热门文章

  1. 学习 jQuery UI
  2. Zeppelin源码
  3. 1个Python特征选择工具,助力实现高效机器学习
  4. 一对一培训之视频免费分享-2018-01-21-第 03 阶段-准备-基础-架构-01
  5. 前端面试回顾(1)---javascript的面向对象
  6. 【点播系列之一】关于阿里视频云点播解决方案,你想知道的都在这里!
  7. java中的==和equals
  8. SQL Server Management Studio 2012 设置脚本默认保存路径
  9. 2014年工作中遇到的10个问题:221-230
  10. 基于引擎的matlab+vc混合编程的配置