Java?C++?leetcode面試零矩陣
題目要求
思路:模擬
- 定義兩個(gè)數(shù)組分別記錄每行or每列中為0的元素;
- 0所在的行列清零也就意味著元素所在行or列有0則置零【廢話連篇】;
- 所以一次遍歷找出有0的行列,一次遍歷根據(jù)其將相應(yīng)元素置零。
Java
class Solution { public void setZeroes(int[][] matrix) { int n = matrix.length, m = matrix[0].length; boolean[] rows = new boolean[n], cols = new boolean[m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) if (matrix[i][j] == 0) rows[i] = cols[j] = true; } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) if (rows[i] || cols[j]) matrix[i][j] = 0; } } }
- 時(shí)間復(fù)雜度:O(n×m)
- 空間復(fù)雜度:O(n+m)
C++
class Solution { public: void setZeroes(vector<vector<int>>& matrix) { int n = matrix.size(), m = matrix[0].size(); bool rows[n], cols[m]; memset(rows, 0, sizeof(rows)); memset(cols, 0, sizeof(cols)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) if (matrix[i][j] == 0) rows[i] = cols[j] = true; } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) if (rows[i] || cols[j]) matrix[i][j] = 0; } } };
- 時(shí)間復(fù)雜度:O(n×m)
- 空間復(fù)雜度:O(n+m)
Rust
impl Solution { pub fn set_zeroes(matrix: &mut Vec<Vec<i32>>) { let (n, m) = (matrix.len(), matrix[0].len()); let (mut rows, mut cols) = (vec![false; n], vec![false; m]); for i in 0..n { for j in 0..m { if matrix[i][j] == 0 { rows[i] = true; cols[j] = true; } } } for i in 0.. n { for j in 0..m { if rows[i] || cols[j] { matrix[i][j] = 0; } } } } }
- 時(shí)間復(fù)雜度:O(n×m)
- 空間復(fù)雜度:O(n+m)
總結(jié)
因?yàn)槭侵械阮}所以糾結(jié)了半天是不是有什么精巧奇妙的算法解題……emmmm結(jié)果就只是通過(guò)修改給出數(shù)組來(lái)標(biāo)記,空間復(fù)雜度能降到常數(shù)了,有意義但不大
以上就是Java C++ leetcode面試零矩陣的詳細(xì)內(nèi)容,更多關(guān)于Java C++ 面試零矩陣的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Java?C++刷題leetcode1106解析布爾表達(dá)式
- Java C++題解leetcode816模糊坐標(biāo)示例
- Java C++題解leetcode 1684統(tǒng)計(jì)一致字符串的數(shù)目示例
- Java?C++題解leetcode764最大加號(hào)標(biāo)志示例
- Java C++題解leetcode915分割數(shù)組示例
- Java?C++題解leetcode904水果成籃
- Java?C++題解leetcode902最大為N的數(shù)字組合數(shù)位DP
- Java C++題解leetcode1620網(wǎng)絡(luò)信號(hào)最好的坐標(biāo)
相關(guān)文章
C++替換棧中和.data中的cookie實(shí)現(xiàn)步驟詳解
這篇文章主要介紹了C++替換棧中和.data中的cookie實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10C++將音頻PCM數(shù)據(jù)封裝成wav文件的方法
這篇文章主要為大家詳細(xì)介紹了C++將音頻PCM數(shù)據(jù)封裝成wav文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01C++簡(jiǎn)明分析臨時(shí)對(duì)象是什么
對(duì)性能來(lái)說(shuō),許多的問(wèn)題都需要和出現(xiàn)頻率及本身執(zhí)行一次的開銷掛鉤,有些問(wèn)題雖然看似比較開銷較大,但是很少會(huì)執(zhí)行到,那也不會(huì)對(duì)程序有大的影響;同樣一個(gè)很小開銷的函數(shù)執(zhí)行很頻繁,同樣會(huì)對(duì)程序的執(zhí)行效率有很大影響。本章中作者主要根據(jù)臨時(shí)對(duì)象來(lái)闡述這樣一個(gè)觀點(diǎn)2022-04-04C++實(shí)現(xiàn)LeetCode(9.驗(yàn)證回文數(shù)字)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(9.驗(yàn)證回文數(shù)字),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++ 實(shí)現(xiàn)一個(gè)復(fù)數(shù)類的實(shí)例代碼
這篇文章主要介紹了C++ 實(shí)現(xiàn)一個(gè)復(fù)數(shù)類的實(shí)例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-0416種C語(yǔ)言編譯警告(Warning)類型的解決方法
由于編譯的警告各種各樣,根本不可以一一羅列出來(lái),下面只是列舉出比較典型的十六種警告,還有一些警告,大家只要根據(jù)字面意思,就可以很快的查找出來(lái),并解決之。希望對(duì)大家有所幫助。2014-08-08