矩陣置零的優化演算法 簡單易懂

2021-10-22 18:30:59 字數 1337 閱讀 1847

問題

給定乙個 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]]

問題分析:

該問題需要將矩陣**現的0的行和列全部置為0,然後輸出。最先開始考慮到的是兩次遍歷陣列,第一次遍歷將陣列中為0的地方標記,第二次遍歷則將標記處的行和列全部置為0即可,但是這樣會造成浪費空間,不符合要求。

提公升演算法的空間複雜度不難,可以將第一行和第一列單獨的進行分析,並且設立標誌,先檢視第一行和第一列的是否有0出現,有的話將標誌置位true,然後**中首先分析除過第一行和第一列的元素是否有0出現,若有0出現,則將對應的元素的首行和首列元素置0,通俗理解就是相當關於計數器,最後在來分析第一列和第一行的元素中是否有為0。

**描述**

**:

class

solution

for(

int i=

0;i)for

(int i=

1;ifor(

int i=

1;iif(sign_x==

true)}

if(sign_y==

true)}}};

每天記錄一點點,有錯誤麻煩大神批評指正!!!

演算法基礎 陣列操作 矩陣置零

給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。示例 1 輸入 1,1,1 1,0,1 1,1,1 輸出 1,0,1 0,0,0 1,0,1 示例 2 輸入 0,1,2,0 3,4,5,2 1,3,1,5 輸出 0,0,0,0 0,4,5,0...

簡單的矩陣優化演算法

對於矩陣乘法 c a b 通常的做法是將矩陣進行分塊相乘,如下圖所示 從上圖可以看出這種分塊相乘總共用了 8 次乘法,當然對於子矩陣相乘 如 a0 b0 還可以繼續遞迴使用分塊相乘。對於中小矩陣來說,很適合使用這種分塊乘法,但是對於大矩陣來說,遞迴的次數較多,如果能減少每次分塊乘法的次數,那麼效能將...

LeetCode演算法題73 矩陣置零解析

給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。示例 1 輸入 1,1,1 1,0,1 1,1,1 輸出 1,0,1 0,0,0 1,0,1 示例 2 輸入 0,1,2,0 3,4,5,2 1,3,1,5 輸出 0,0,0,0 0,4,5,0...