成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[LintCode/LeetCode/CC] Set Matrix Zeroes

zhangwang / 1691人閱讀

摘要:把矩陣所有零點的行和列都置零,要求不要額外的空間。對于首行和首列的零點,進行額外的標(biāo)記即可。這道題我自己做了四遍,下面幾個問題需要格外注意標(biāo)記首行和首列時,從到遍歷時,若有零點,則首列標(biāo)記為從到遍歷,若有零點,則首行標(biāo)記為。

Problem

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

Example

Given a matrix

[
  [1,2],
  [0,3]
],

return

[
[0,2],
[0,0]
]
Challenge

Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?

Note

把矩陣所有零點的行和列都置零,要求不要額外的空間。基本的思路是把這些零點坐標(biāo)的行和列都標(biāo)記下來,只不過把標(biāo)記存在首行和首列。對于首行和首列的零點,進行額外的標(biāo)記即可。所以,算法的步驟為:
首行、首列標(biāo)記:分別標(biāo)記首行和首列是否有零點
子矩陣標(biāo)記:遍歷除首行和首列之外的整個矩陣,將所有零點的坐標(biāo)分別標(biāo)記在首行和首列
子矩陣置零:遍歷除首行和首列的整個矩陣的所有點,若某點映射在首行或首列的同列點或同行點為零點,便置該點為零點;
首行、首列置零:最后分別處理首行、首列,若標(biāo)記有零點,則首行、首列全部置零。
這道題我自己做了四遍,下面幾個問題需要格外注意:

標(biāo)記首行和首列時,從0到m遍歷matrix[i][0]時,若有零點,則首列標(biāo)記為true;從0到n遍歷matrix[0][j],若有零點,則首行標(biāo)記為true。

必須先標(biāo)記和置零子矩陣,即行和列的循環(huán)都從1開始,否則會影響最后對首行和首列的置零。

Solution
public class Solution {
    public void setZeroes(int[][] matrix) {
        boolean row = false, col = false;
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return;
        int m = matrix.length, n = matrix[0].length;
        for (int i = 0; i < m; i++) {
            if (matrix[i][0] == 0) col = true;
        }
        for (int j = 0; j < n; j++) {
            if (matrix[0][j] == 0) row = true;
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (matrix[i][j] == 0) {
                    matrix[i][0] = matrix[0][j] = 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;
                }
            }
        }
        for (int i = 0; i < m && col; i++) {
            matrix[i][0] = 0;
        }
        for (int j = 0; j < n && row; j++) {
            matrix[0][j] = 0;
        }
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65701.html

相關(guān)文章

  • [Leetcode] Set Matrix Zeroes 矩陣置零

    摘要:這個方法的缺點在于,如果我們直接將存入首行或首列來表示相應(yīng)行和列要置的話,我們很難判斷首行或者首列自己是不是該置。 Set Matrix Zeroes Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click to show follow up...

    waltr 評論0 收藏0
  • leetcode73. Set Matrix Zeroes

    摘要:題目要求當(dāng)遇到數(shù)組中的值時,即將該值所在的行和列全部改為。新建兩個數(shù)組分別代表該行和該列是否需要清零。然后根據(jù)這兩個數(shù)組的情況對原數(shù)組進行賦值。雖然這意味著犧牲了一點時間性能,但是如果數(shù)據(jù)量非常龐大的話是非常好的一種實現(xiàn)。 題目要求 Given a m x n matrix, if an element is 0, set its entire row and column to 0....

    lookSomeone 評論0 收藏0
  • leetcode 部分解答索引(持續(xù)更新~)

    摘要:前言從開始寫相關(guān)的博客到現(xiàn)在也蠻多篇了。而且當(dāng)時也沒有按順序?qū)懍F(xiàn)在翻起來覺得蠻亂的??赡艽蠹铱粗卜浅2环奖?。所以在這里做個索引嘻嘻。順序整理更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新 前言 從開始寫leetcode相關(guān)的博客到現(xiàn)在也蠻多篇了。而且當(dāng)時也沒有按順序?qū)憽F(xiàn)在翻起來覺得蠻亂的??赡艽蠹铱粗卜浅2环奖恪K栽谶@里做個索引嘻嘻。 順序整理 1~50 1...

    leo108 評論0 收藏0
  • LeetCode 攻略 - 2019 年 8 月上半月匯總(109 題攻略)

    摘要:每天會折騰一道及以上題目,并將其解題思路記錄成文章,發(fā)布到和微信公眾號上。三匯總返回目錄在月日月日這半個月中,做了匯總了數(shù)組知識點?;蛘呃奖疚淖钕旅?,添加的微信等會根據(jù)題解以及留言內(nèi)容,進行補充,并添加上提供題解的小伙伴的昵稱和地址。 LeetCode 匯總 - 2019/08/15 Create by jsliang on 2019-08-12 19:39:34 Recently...

    tracy 評論0 收藏0
  • Leetcode PHP題解--D68 283. Move Zeroes

    摘要:題目鏈接題目分析給定一個整數(shù)數(shù)組,將值為的元素移動到數(shù)組末尾,而不改動其他元素出現(xiàn)的順序。再在去后的元素末尾填充到計算出的數(shù)組長度。最終代碼若覺得本文章對你有用,歡迎用愛發(fā)電資助。 D68 283. Move Zeroes 題目鏈接 283. Move Zeroes 題目分析 給定一個整數(shù)數(shù)組,將值為0的元素移動到數(shù)組末尾,而不改動其他元素出現(xiàn)的順序。 思路 計算總共有多少個元素。 再...

    xiongzenghui 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<