力扣刷题Day 43:矩阵置零(73)

1.题目描述

2.思路

方法1:遍历矩阵的行和列查找0元素并置同行同列的元素为0,新创建一个m*n的矩阵以标记当前的0元素是本身就为0还是被同行同列的元素传染成0的。

方法2:遍历矩阵,记录0元素的行和列,结束遍历后统一置零。

3.代码(Python3)

方法1:

复制代码
import numpy as np

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        m, n = len(matrix), len(matrix[0])
        marked = np.ones((m, n), dtype=int)
        for i in range(m):
            for j in range(n):
                if matrix[i][j] == 0 and marked[i][j] != 0:
                    for k in range(n):
                        if matrix[i][k] != 0:
                            matrix[i][k] = 0
                            marked[i][k] = 0
                    for k in range(m):
                        if matrix[k][j] != 0:
                            matrix[k][j] = 0
                            marked[k][j] = 0

方法2:

复制代码
class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        m, n = len(matrix), len(matrix[0])
        zero_i, zero_j = set(), set()
        for i in range(m):
            for j in range(n):
                if matrix[i][j] == 0:
                    zero_i.add(i)
                    zero_j.add(j)
        for i in zero_i:
            for k in range(n):
                matrix[i][k] = 0
        for j in zero_j:
            for k in range(m):
                matrix[k][j] = 0

方法3:

4.执行情况

方法1:

方法2:

5.感想

方法1的空间复杂度为O(m * n),方法2的空间复杂度为O(m + n),官方题解使用两个标记变量的方法虽然实现了O(1)的空间复杂度但是我觉得没那个必要所以没再仔细研究。

相关推荐
蛋先生DX25 分钟前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面1 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号1 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
马拉AI1 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者3 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者3 小时前
【征程6】校准量化中HistogramObserver解析
算法
OuO-24 小时前
笔试强训 Day 34:ISBN 号码、kotori 和迷宫、矩阵最长递增路径
java·算法·矩阵
程序喵大人5 小时前
【C++进阶】STL算法与函数对象 - 04 find、count和any_of把查询写成意图
开发语言·c++·算法
豆沙沙包?5 小时前
c++中引用(P7-P11)
java·c++·算法
不会代码的小猴5 小时前
标准模板库(STL)
开发语言·c++·笔记·算法