摘要:把矩陣所有零點的行和列都置零,要求不要額外的空間。對于首行和首列的零點,進行額外的標記即可。這道題我自己做了四遍,下面幾個問題需要格外注意標記首行和首列時,從到遍歷時,若有零點,則首列標記為從到遍歷,若有零點,則首行標記為。
Problem
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
ExampleGiven 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?
把矩陣所有零點的行和列都置零,要求不要額外的空間?;镜乃悸肥前堰@些零點坐標的行和列都標記下來,只不過把標記存在首行和首列。對于首行和首列的零點,進行額外的標記即可。所以,算法的步驟為:
首行、首列標記:分別標記首行和首列是否有零點;
子矩陣標記:遍歷除首行和首列之外的整個矩陣,將所有零點的坐標分別標記在首行和首列;
子矩陣置零:遍歷除首行和首列的整個矩陣的所有點,若某點映射在首行或首列的同列點或同行點為零點,便置該點為零點;
首行、首列置零:最后分別處理首行、首列,若標記有零點,則首行、首列全部置零。
這道題我自己做了四遍,下面幾個問題需要格外注意:
標記首行和首列時,從0到m遍歷matrix[i][0]時,若有零點,則首列標記為true;從0到n遍歷matrix[0][j],若有零點,則首行標記為true。
必須先標記和置零子矩陣,即行和列的循環都從1開始,否則會影響最后對首行和首列的置零。
Solutionpublic 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; } } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65701.html
摘要:這個方法的缺點在于,如果我們直接將存入首行或首列來表示相應行和列要置的話,我們很難判斷首行或者首列自己是不是該置。 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...
摘要:題目要求當遇到數組中的值時,即將該值所在的行和列全部改為。新建兩個數組分別代表該行和該列是否需要清零。然后根據這兩個數組的情況對原數組進行賦值。雖然這意味著犧牲了一點時間性能,但是如果數據量非常龐大的話是非常好的一種實現。 題目要求 Given a m x n matrix, if an element is 0, set its entire row and column to 0....
摘要:前言從開始寫相關的博客到現在也蠻多篇了。而且當時也沒有按順序寫現在翻起來覺得蠻亂的??赡艽蠹铱粗卜浅2环奖恪K栽谶@里做個索引嘻嘻。順序整理更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新 前言 從開始寫leetcode相關的博客到現在也蠻多篇了。而且當時也沒有按順序寫~現在翻起來覺得蠻亂的。可能大家看著也非常不方便。所以在這里做個索引嘻嘻。 順序整理 1~50 1...
摘要:每天會折騰一道及以上題目,并將其解題思路記錄成文章,發布到和微信公眾號上。三匯總返回目錄在月日月日這半個月中,做了匯總了數組知識點?;蛘呃奖疚淖钕旅妫砑拥奈⑿诺葧鶕}解以及留言內容,進行補充,并添加上提供題解的小伙伴的昵稱和地址。 LeetCode 匯總 - 2019/08/15 Create by jsliang on 2019-08-12 19:39:34 Recently...
摘要:題目鏈接題目分析給定一個整數數組,將值為的元素移動到數組末尾,而不改動其他元素出現的順序。再在去后的元素末尾填充到計算出的數組長度。最終代碼若覺得本文章對你有用,歡迎用愛發電資助。 D68 283. Move Zeroes 題目鏈接 283. Move Zeroes 題目分析 給定一個整數數組,將值為0的元素移動到數組末尾,而不改動其他元素出現的順序。 思路 計算總共有多少個元素。 再...
閱讀 2066·2021-09-22 15:54
閱讀 1830·2021-09-04 16:40
閱讀 854·2019-08-30 15:56
閱讀 2623·2019-08-30 15:44
閱讀 2150·2019-08-30 13:52
閱讀 1120·2019-08-29 16:35
閱讀 3340·2019-08-29 16:31
閱讀 2562·2019-08-29 13:48