73.矩阵置零

本文介绍了如何在二维矩阵中找到并置零的操作,首先通过暴力求解方法,记录0的位置;然后优化算法中,利用哈希表减少空间复杂度,将时间复杂度降低。
摘要由CSDN通过智能技术生成

·题目描述

·解题思路

——————初步思路,暴力求解——————

1.遍历原矩阵,记录0位置的行列值,存入数组flags中,作为标志

2.读取flags中的元素,获取要置为0的行列值,然后两个循环将matrix中的对应元素置为0

代码:

    def setZeroes(self, matrix):
        #时间复杂度O(mn^2),空间复杂度o(mn)
        row = len(matrix)
        col = len(matrix[0])
        flags = []

        for i in range(row):
            for j in range(col):
                if matrix[i][j] == 0:
                    res = [i,j]
                    flags.append(res)

        for flag in flags:
            r,c = flag[0],flag[1]
            for i in range(row):
                matrix[i][c] =0
            for j in range(col):
                matrix[r][j] = 0

        return matrix

——————改进优化,使用哈希表——————

1.将原始需要记录行列的数组flags改为两个哈希表row和col

2.遍历矩阵将0位子的行列分别存入哈希表中

3.循环置为0

代码:

    def setZeroes(self, matrix):
          # 时间复杂度O(mn) 空间复杂度O(m+n)
        row_num = len(matrix)
        col_num = len(matrix[0]) if row_num > 0 else 0
        row = set()
        col = set()


        for i in range(row_num):
            for j in range(col_num):
                if matrix[i][j] == 0:
                    row.add(i)
                    col.add(j)

        for i in range(row_num):
            for j in range(col_num):
                if i in row or j in col:
                    matrix[i][j] = 0

        return matrix

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值