73 矩陣置零 c語言

2021-10-22 18:20:41 字數 1477 閱讀 5830

矩陣置零 給定乙個 m x n 的矩陣,如果乙個元素為 0 ,則將其所在行和列的所有元素都設為 0 。請使用 原地 演算法。

高階:乙個直觀的解決方案是使用 o(mn) 的額外空間,但這並不是乙個好的解決方案。 乙個簡單的改進方案是使用 o(m + n)

的額外空間,但這仍然不是最好的解決方案。 你能想出乙個僅使用常量空間的解決方案嗎?

示例 1:

輸入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 輸出:[[1,0,1],[0,0,0],[1,0,1]] 示例

2:輸入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]

輸出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

m == matrix.length n == matrix[0].length 1 <= m, n <= 200

-231 <= matrix[i][j] <= 231 - 1

空間 o

(m+n)

先掃瞄看哪一行那一列要置0

在逐個進行變化

void

setzeroes

(int

** matrix,

int matrixsize,

int* matrixcolsize)

for(

int i =

0;i<

*matrixcolsize;i++

)for

(int i=

0;i}for

(int i =

0;i}}

方法二:使用兩個標記變數

思路和演算法

我們可以用矩陣的第一行和第一列代替方法一中的兩個標記陣列,以達到 o(1)o(1)

的額外空間。但這樣會導致原陣列的第一行和第一列被修改,無法記錄它們是否原本包含

00。因此我們需要額外使用兩個標記變數分別記錄第一行和第一列是否原本包含 00。

在實際**中,我們首先預處理出兩個標記變數,接著使用其他行與列去處理第一行與第一列,然後反過來使用第一行與第一列去更新其他行與列,最後使用兩個標記變數更新第一行與第一列即可。

void

setzeroes

(int

** matrix,

int matrixsize,

int* matrixcolsize)

}for

(int j =

0; j < n; j++)}

for(

int i =

1; i < m; i++)}

}for

(int i =

1; i < m; i++)}

}if(flag_col0)}if

(flag_row0)}}

9ll7

/

73 矩陣置零 C

判斷第一列是否有0 for int i 0 i i if matrix i 0 0 如果某個元素為0,則將所在行所在列的第乙個元素置為0 for int i 1 i i for int j 1 j j if matrix i j 0 遍歷,如果所在行或列的第乙個元素為0,則置為0 for int i...

73 矩陣置零

方法1 賦值另存乙個m n的矩陣,在原矩陣為零的值相應置新的矩陣行和列為零。額外空間為o m n o m n o m n 方法2 兩個陣列,bool m 和 bool n 分別存某行有零,後者某列有零。之後根據陣列值將原矩陣相應位置置零。額外空間o m n o m n o m n 方法3 看來許久才...

73 矩陣置零

題目.middle 要想不使用額外空間,那麼就需要將標誌位設在原來的資料上面,這裡就把第一行和第一列用來儲存改行或者該列是否有0 的標誌,這樣原來是否是0就被覆蓋了,所以需要兩個標誌記錄下來 package main import fmt func setzeroes matrix int rows...