当前位置: 首页 > news >正文

【LeetCode热题100】73. 矩阵置零(矩阵)

一.题目要求

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

二.题目难度

中等

三.输入样例

示例 1:
在这里插入图片描述

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]

示例 2:
在这里插入图片描述

输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

提示:
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
− 2 31 -2^{31} 231 <= matrix[i][j] <= 2 31 − 1 2^{31} - 1 2311

进阶:
一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。
一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
你能想出一个仅使用常量空间的解决方案吗?

四.解题思路

没什么可说的 官方解法是优化后的
在这里插入图片描述

五.代码实现

class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {set<int> zeroh,zerol;vector<vector<int>>::iterator it;vector<int>::iterator itt;for (it = matrix.begin(); it != matrix.end(); it++){for (itt = (*it).begin(); itt != (*it).end(); itt++){if (*itt == 0){zeroh.insert(it - matrix.begin());zerol.insert(itt - (*it).begin());}}}for (set<int>::iterator it = zeroh.begin(); it != zeroh.end(); it++){for (vector<int>::iterator itl = matrix[*it].begin(); itl != matrix[*it].end(); itl++){*itl = 0;}}for (set<int>::iterator it = zerol.begin(); it != zerol.end(); it++){for (vector<vector<int>>::iterator ith = matrix.begin(); ith != matrix.end(); ith++){(*ith)[*it] = 0;}}}
};

官方给的优化方法

class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {bool firstRowZero = false, firstColZero = false;int rows = matrix.size(), cols = matrix[0].size();// Determine if the first row or first column is all zerosfor (int i = 0; i < rows; i++) {if (matrix[i][0] == 0) {firstColZero = true;break;}}for (int j = 0; j < cols; j++) {if (matrix[0][j] == 0) {firstRowZero = true;break;}}// Use first row and column as markers, set matrix[i][0] and matrix[0][j] to 0 if matrix[i][j] is 0for (int i = 1; i < rows; i++) {for (int j = 1; j < cols; j++) {if (matrix[i][j] == 0) {matrix[i][0] = 0;matrix[0][j] = 0;}}}// Zero out cells based on the first row and columnfor (int i = 1; i < rows; i++) {for (int j = 1; j < cols; j++) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}// Zero out the first row and column if neededif (firstColZero) {for (int i = 0; i < rows; i++) matrix[i][0] = 0;}if (firstRowZero) {for (int j = 0; j < cols; j++) matrix[0][j] = 0;}}
};

六.题目总结

http://www.lryc.cn/news/317596.html

相关文章:

  • 使用Barrier共享鼠标键盘,通过macos控制ubuntu系统
  • c++:类和对象中:拷贝构造和赋值运算符重载详解
  • Day33:安全开发-JavaEE应用SQL预编译Filter过滤器Listener监听器访问控制
  • Log4j如何支持多线程环境?你如何优化Log4j的性能?
  • golang sync.Pool 指针数据覆盖问题
  • VUE+内置iframe传值失效问题解决
  • Day31:安全开发-JS应用WebPack打包器第三方库JQuery安装使用安全检测
  • Go Zero微服务个人探究之路(十六)回顾api服务和rpc服务的本质
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜间车辆检测系统(深度学习代码+UI界面+训练数据集)
  • Spring体系架构
  • 【PLC】现场总线和工业以太网汇总
  • 【吊打面试官系列】Java虚拟机JVM篇 - 关于JVM分析
  • Mysql锁与MVCC
  • rancher是什么
  • 阿里云服务器安全狗免费使用多引擎智能查杀引擎
  • 使用rust实现九九乘法表
  • 突破编程_C++_设计模式(简单工厂模式)
  • C语言——快速排序
  • FP独立站获客秘籍大揭秘:简单高效,一看就会!
  • 英伟达tx2光驱烧录功能支持
  • 关于stm32(CubeMX+HAL库)的掉电检测以及flash读写
  • Elastic script_score的使用
  • 【Spring Boot 3】获取已注入的Bean
  • C# 对于点位置的判断
  • 最新CLion + STM32 + CubeMX 开发环境搭建
  • 【Python3】观察者模式
  • HTML5 Web Worker之性能优化
  • 应对恶意IP攻击的有效方法
  • 如何使用“Docker registry创建本地仓库,在服务器之间进行文件push和pull”?
  • Rocky Linux - Primavera P6 EPPM 安装及分享