栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-01:矩阵置零。给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶:一个直观的解决方案是使用 O(mn) 的额外空间

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-01:矩阵置零。给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶:一个直观的解决方案是使用 O(mn) 的额外空间

2021-10-01:矩阵置零。给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶:一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。你能想出一个仅使用常量空间的解决方案吗?力扣73。

福大大 答案2021-10-01:

遍历除了0行和0列的数据,
第一次遍历,如果arr[i,j]==0,则arr[i][0]=0和arr[0][j]=0。
第二次遍历,如果arr[i][0]=0或者arr[0][j]=0,则arr[i,j]==0。
最后对0行和0列的数据做特殊处理。
时间复杂度:O(mn)。
额外空间复杂度:O(1)。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
    if true {
        matrix := [][]int{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}
        setZeroes1(matrix)
        fmt.Println(matrix)
    }
    if true {
        matrix := [][]int{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}
        setZeroes2(matrix)
        fmt.Println(matrix)
    }
}

func setZeroes1(matrix [][]int) {
    row0Zero := false
    col0Zero := false
    i := 0
    j := 0
    for i = 0; i < len(matrix[0]); i++ {
        if matrix[0][i] == 0 {
            row0Zero = true
            break
        }
    }
    for i = 0; i < len(matrix); i++ {
        if matrix[i][0] == 0 {
            col0Zero = true
            break
        }
    }
    for i = 1; i < len(matrix); i++ {
        for j = 1; j < len(matrix[0]); j++ {
            if matrix[i][j] == 0 {
                matrix[i][0] = 0
                matrix[0][j] = 0
            }
        }
    }
    for i = 1; i < len(matrix); i++ {
        for j = 1; j < len(matrix[0]); j++ {
            if matrix[i][0] == 0 || matrix[0][j] == 0 {
                matrix[i][j] = 0
            }
        }
    }
    if row0Zero {
        for i = 0; i < len(matrix[0]); i++ {
            matrix[0][i] = 0
        }
    }
    if col0Zero {
        for i = 0; i < len(matrix); i++ {
            matrix[i][0] = 0
        }
    }
}

func setZeroes2(matrix [][]int) {
    col0 := false
    i := 0
    j := 0
    for i = 0; i < len(matrix); i++ {
        for j = 0; j < len(matrix[0]); j++ {
            if matrix[i][j] == 0 {
                matrix[i][0] = 0
                if j == 0 {
                    col0 = true
                } else {
                    matrix[0][j] = 0
                }
            }
        }
    }
    for i = len(matrix) - 1; i >= 0; i-- {
        for j = 1; j < len(matrix[0]); j++ {
            if matrix[i][0] == 0 || matrix[0][j] == 0 {
                matrix[i][j] = 0
            }
        }
    }
    if col0 {
        for i = 0; i < len(matrix); i++ {
            matrix[i][0] = 0
        }
    }
}

执行结果如下:


左神java代码

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284045.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号