力扣算法题—073矩阵置零
给定一个 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.2. 为什么要考查算法 1.3. 目前面试主要考查 3 类 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一 ...
- LeetCode -- 力扣算法题解题心得 -- (个人笔记记录)持续更新~~
一.前言 正式开启数据结构+算法研究的历程,准备好一年后的面试.下面的解法不一定是最优解,只求能力提升,会定期更新~~ 二.目录 1 2 19 20 21 24 35 42 83 86 94 96 1 ...
- 力扣算法题—042接雨水
1 #include"000库函数.h" 2 //一点头绪都没有 3 //然后就自己按自己的意思来一遍 4 //好像没有用算法 5 //16ms,让我激动一把 6 7 class ...
- “宝石与石头”:一道简单却巧妙的力扣算法题
本篇博客会讲解力扣"771. 宝石与石头"的解题思路,这是题目链接. 先来审题: 以下是输出示例: 以下是提示: 本题可以使用数组模拟哈希表来实现.先把宝石字符串中的字符标识到数组 ...
- 力扣算法题-19.秋叶收藏集 C语言实现
题目 小扣出去秋游,途中收集了一些红叶和黄叶,他利用这些叶子初步整理了一份秋叶收藏集 leaves, 字符串 leaves 仅包含小写字符 r 和 y, 其中字符 r 表示一片红叶,字符 y 表示一片 ...
- 力扣算法题,第N个神奇数字(Python)
878.第N个神奇数字 题目描述: 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + ...
- 力扣算法题—074搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...
- 力扣算法题—075颜色分类
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- 力扣简单题-柠檬水找零
题目:在柠檬水摊上,每一杯柠檬水的售价为 5 美元.顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 20 美元.你必 ...
最新文章
- RISC-V会彻底改变计算吗?
- mysql 创建库设置中文
- 23种设计模式及其对应实例-转
- kafka笔记3(生产者)
- python的全局变量能暂存数据吗_Python 中的全局变量 局部变量
- python numpy的部分函数
- 划重点!十分钟掌握牛顿法凸优化
- 函数没有“as”子句;假定返回类型为 object。_TypeScript笔记(一)类型amp;接口...
- 如何通过调试找到自己需要的ABAP增强
- 如何排查 .NET 内存泄漏
- Leetcode 数据结构与算法题解大全——目录(推荐收藏,持续更新)
- XML基本概念及增删改查操作
- Java网络编程之NIO编程(待补充)
- Android Studio3.2.1升级刨坑记录
- 阿里云开源编程马拉松入围项目
- (73)信号发生器DDS三角波设计(一)(第15天)
- markdownpad2下载安装教程
- 如何将java/Android签名工具keytool单独提取出来使用
- Java一键生成PDF合同以及骑缝章、盖章处的精准盖章
- UVALive 6437