中級演算法之陣列和字串 矩陣置零

2021-10-02 12:02:40 字數 1200 閱讀 1232

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

[0,3,1,0]

]

高階:

乙個直接的解決方案是使用  o(mn) 的額外空間,但這並不是乙個好的解決方案。

乙個簡單的改進方案是使用 o(m + n) 的額外空間,但這仍然不是最好的解決方案。

你能想出乙個常數空間的解決方案嗎?

o(mn)的額外空間辦法是重開乙個陣列進行儲存,這裡不做贅述

我自己想到的是o(m+n)的方式,開兩個陣列分別存為0的行和列。

void setzeroes(vector>& matrix) 

} }set::iterator rit = row.begin();

while(rit!=row.end())

rit++;

} set::iterator cit = col.begin();

while (cit != col.end())

cit++;

}}

最好的辦法是常數空間,也就是用第一行存為0的列,第一列存為0的行,至於第一行和第一列是否為0,則需要firstrow和firstcol來儲存了。

void setzeroes(vector>& matrix) 

} for (int i = 0; i < matrix.size(); i++)

} for (int i = 0; i < matrix[0].size(); i++)

} //然後處理第一行和第一列

if (firstrow == 0)

if (firstcol == 0)

}

中級演算法之陣列和字串 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 思路 首先進行排序,...

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

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

中級演算法之陣列和字串 無重複字元的最長子串

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...