日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

set-matrix-zeroes当元素为0则设矩阵内行与列均为0

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 set-matrix-zeroes当元素为0则设矩阵内行与列均为0 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

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.

Follow up:

Did you use extra space?
A straight forward solution using O(m?n) 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?

1 class Solution { 2 public: 3 void setZeroes(vector<vector<int> > &matrix) { 4 vector<bool> col,row; 5 col.resize(matrix[0].size(), false); 6 row.resize(matrix.size(), false); 7 for (int i = 0; i < matrix.size(); ++i) 8 { 9 for (int j = 0; j < matrix[i].size();++j) 10 { 11 if(matrix[i][j]==0) 12 { 13 col[j]=true; 14 row[i]=true; 15 } 16 } 17 } 18 for (int i = 0; i < matrix.size(); ++i) 19 { 20 for (int j = 0; j < matrix[i].size();++j) 21 { 22 if(col[j]||row[i]) 23 { 24 matrix[i][j]=0; 25 } 26 } 27 } 28 } 29 };

最優解法:

首先判斷第一行和第一列是否有元素為0,而后利用第一行和第一列保存狀態,最后根據開始的判斷決定是否將第一行和第一列置0

1 //時間復雜度O(mn),空間復雜度O(1) 2 //利用第一行和第一列的空間做記錄 3 class Solution { 4 public: 5 void setZeroes(vector<vector<int> > &matrix) { 6 const int row = matrix.size(); 7 const int col = matrix[0].size(); 8 bool row_flg = false, col_flg = false; 9 10 //判斷第一行和第一列是否有零,防止被覆蓋 11 for (int i = 0; i < row; i++) 12 if (0 == matrix[i][0]) { 13 col_flg = true; 14 break; 15 } 16 for (int i = 0; i < col; i++) 17 if (0 == matrix[0][i]) { 18 row_flg = true; 19 break; 20 } 21 //遍歷矩陣,用第一行和第一列記錄0的位置 22 for (int i = 1; i < row; i++) 23 for (int j = 1; j < col; j++) 24 if (0 == matrix[i][j]) { 25 matrix[i][0] = 0; 26 matrix[0][j] = 0; 27 } 28 //根據記錄清零 29 for (int i = 1; i < row; i++) 30 for (int j = 1; j < col; j++) 31 if (0 == matrix[i][0] || 0 == matrix[0][j]) 32 matrix[i][j] = 0; 33 //最后處理第一行 34 if (row_flg) 35 for (int i = 0; i < col; i++) 36 matrix[0][i] = 0; 37 if (col_flg) 38 for (int i = 0; i < row; i++) 39 matrix[i][0] = 0; 40 } 41 };

?

轉載于:https://www.cnblogs.com/zl1991/p/9630343.html

總結

以上是生活随笔為你收集整理的set-matrix-zeroes当元素为0则设矩阵内行与列均为0的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。