国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Leetcode 73 - Set Matrix Zeroes(Array)

2019-11-08 02:24:47
字體:
供稿:網(wǎng)友

題意

一個矩陣,如果位置[i,j]上有一個元素為0,那么就將第i行的所有元素置為0,將第j列的所有元素置為0。

思路

算法1

O(m+n)空間。

開一個row[]col[]分別記錄哪些行,哪些列需要置為0即可。

算法2

O(1)空間。

從上一個算法我們可以知道必須要保存需要update的行和列,但是只能額外開O(1)的空間,那么我們只有利用現(xiàn)有的空間了。

于是,類似于十字交叉鏈表的思想,我們可以用第一行和第一列來記錄需要update的行和列。

如下圖所示: 表示情況

細節(jié)

在算法2中,我們需要注意這樣一個問題,我們用第一行的某一個元素a[0,j]=0來表示第j列需要全部更新為0,第一列的a[i,0]來表示第i行需要全部更新為0。但是存在一個問題就是我們的a[0,0]這樣的話就需要同時表示第一行和第一列的更新情況了,所以單獨開一個變量rc來記錄第一行和第一列的更新情況。

代碼

algorithm 1

class Solution {public: void setZeroes(vector<vector<int>>& matrix) { if (matrix.size()) { int m = matrix.size(), n = matrix[0].size(); vector<int> row(matrix.size(), 0); vector<int> col(matrix[0].size(), 0); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (!matrix[i][j]) {row[i] = 1, col[j] = 1;} } } for (int i = 0; i < m; i++) { if (row[i]) { for (int j = 0; j < n; j++) matrix[i][j] = 0; } } for (int j = 0; j < n; j++) { if (col[j]) { for (int i = 0; i < m; i++) matrix[i][j] = 0; } } } }};

algorithm 2

class Solution {public: void setZeroes(vector<vector<int>>& matrix) { if (matrix.size()) { int m = matrix.size(), n = matrix[0].size(); int r = 0, c = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (!matrix[i][j]) { j ? matrix[0][j] = 0 : c = 1; i ? matrix[i][0] = 0 : r = 1; } } } for (int j = 1; j < n; j++) { if (!matrix[0][j]) { for (int i = 1; i < m; i++) matrix[i][j] = 0; } } for (int i = 1; i < m; i++) { if (!matrix[i][0]) { for (int j = 1; j < n; j++) { matrix[i][j] = 0; } } } if (r) { for (int j = 0; j < n; j++) matrix[0][j] = 0; } if (c) { for (int i = 0; i < m; i++) matrix[i][0] = 0; } } }};
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永顺县| 竹溪县| 大城县| 灵武市| 上栗县| 裕民县| 诸暨市| 安新县| 大庆市| 肥西县| 蓬安县| 南投县| 阿荣旗| 鄂伦春自治旗| 清流县| 舒城县| 太原市| 尼木县| 义马市| 黑山县| 抚州市| 洛南县| 辽阳市| 凌源市| 榆社县| 深泽县| 上饶市| 赣州市| 通辽市| 肇东市| 周口市| 牙克石市| 深州市| 新丰县| 苏尼特右旗| 乳源| 抚顺县| 漠河县| 九台市| 津南区| 准格尔旗|