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

LeetCode hot 100—矩阵置零

题目

给定一个 m x n 的矩阵,如果一个元素为 ,则将其所在行和列的所有元素都设为 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]]

分析

标记法

先判断第一行和第一列是否包含 0,因为这两部分既是数据又充当标记作用。

遍历除第一行、第一列之外的所有元素。如果发现元素为 0,则将对应行的第一列和对应列的第一行设为 0,作为该行或该列需要清零的标记。

根据第一行和第一列的标记,将相应的元素置为 0。这里需要跳过第一行和第一列,因为它们需要后续单独处理。

根据最初的检查结果,将第一行或第一列全部置为 0。

时间复杂度:O(mn)

空间复杂度:O(1)

class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {if(matrix.empty() || matrix[0].empty()) return;int m = matrix.size(), n = matrix[0].size();bool firstRowZero = false, firstColZero = false;// 检查第一行是否有 0for (int j = 0; j < n; ++j) {if (matrix[0][j] == 0) {firstRowZero = true;break;}}// 检查第一列是否有 0for (int i = 0; i < m; ++i) {if (matrix[i][0] == 0) {firstColZero = true;break;}}// 用第一行和第一列记录每一行和每一列是否需要置 0for (int i = 1; i < m; ++i) {for (int j = 1; j < n; ++j) {if (matrix[i][j] == 0) {matrix[i][0] = 0; // 标记该行matrix[0][j] = 0; // 标记该列}}}// 根据标记将对应行列置 0(注意:跳过第一行和第一列)for (int i = 1; i < m; ++i) {for (int j = 1; j < n; ++j) {if (matrix[i][0] == 0 || matrix[0][j] == 0) {matrix[i][j] = 0;}}}// 若第一行原本存在 0,则将第一行全部置 0if (firstRowZero) {for (int j = 0; j < n; ++j) {matrix[0][j] = 0;}}// 若第一列原本存在 0,则将第一列全部置 0if (firstColZero) {for (int i = 0; i < m; ++i) {matrix[i][0] = 0;}}}
};
http://www.lryc.cn/news/545966.html

相关文章:

  • 部署Windows Server自带“工作文件夹”实现企业网盘功能完整步骤
  • 植物大战僵尸杂交版v3.3最新版本(附下载链接)
  • 非关系型数据库和关系型数据库的区别
  • CPU负载高告警问题的定位与优化建议
  • 2月28日,三极管测量,水利-51单片机
  • 批量提取 Word 文档中的图片
  • C#—Settings配置详解
  • UI自动化框架介绍
  • 【工具推荐】在线提取PDF、文档、图片、论文中的公式
  • 帮我设计一个c语言学习阶段
  • 解决windows npm无法下载electron包的问题
  • 网络编程 day01
  • 【三.大模型实战应用篇】【4.智能学员辅导系统:docx转PDF的自动化流程】
  • 2915. 和为目标值的最长子序列的长度
  • 谷仓的安保
  • vcredist_x64 资源文件分享
  • MySQL零基础教程14—子查询
  • 使用mermaid查看cursor程序生成的流程图
  • L1-031 到底是不是太胖了
  • 服务器时间同步
  • 01. HarmonyOS应用开发实践与技术解析
  • 【大厂AI实践】清华:清华古典诗歌自动生成系统“九歌”的算法
  • JS基础之函数
  • 基于java SSM springboot学生信息管理系统设计和实现
  • 【MongoDB】在Windows11下安装与使用
  • HTML在网页开发中的应用与重要性
  • 深度学习-140-RAG技术之Agentic Chunking分块技术的实现细节和完备实现
  • 全面中耕机与行间中耕机的作用及区别
  • CSS—显示模式display、定位position、元素溢出overflow、float浮动
  • Linux调试器gdb和cgdb的使用【Ubuntu】