力扣刷题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)的空间复杂度但是我觉得没那个必要所以没再仔细研究。

相关推荐
前端小刘哥1 天前
超越“接收端”:解析视频推拉流EasyDSS在RTMP推流生态中的核心价值与中流砥柱作用
算法
前端小刘哥1 天前
新版视频直播点播平台EasyDSS用视频破局,获客转化双提升
算法
海琴烟Sunshine1 天前
leetcode 168. Excel 表列名称 python
python·算法·leetcode
京东零售技术1 天前
探索无限可能:生成式推荐的演进、前沿与挑战
算法
lingchen19061 天前
多项式的积分
算法
1白天的黑夜11 天前
递归-21.合并两个有序链表-力扣(LeetCode)
c++·leetcode·链表·递归
坚持编程的菜鸟1 天前
LeetCode每日一题——在区间范围内统计奇数数目
c语言·算法·leetcode
进击的圆儿1 天前
分治算法_快速排序专题总结-----分治
算法·排序算法·分治·快排·大根堆·小根堆
前进之路91 天前
Leetcode每日一练--35
算法·leetcode
董建光d1 天前
【深度学习】目标检测全解析:定义、数据集、评估指标与主流算法
深度学习·算法·目标检测