LeetCode hot 100 每日一題(13)——73. 矩陣置零

這是一道難度為中等的題目,讓我們來看看題目描述:

給定一個 _m_ x _n_ 的矩陣,如果一個元素為 0 ,則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。
在這里插入圖片描述

提示:

  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • - 2 31 2^{31} 231 <= matrix[i][j] <= 2 31 2^{31} 231 - 1

題解

class Solution {public void setZeroes(int[][] matrix) {int m = matrix.length;  // 獲取矩陣的行數int n = matrix[0].length; // 獲取矩陣的列數boolean[] row = new boolean[m]; // 記錄需要置零的行boolean[] col = new boolean[n]; // 記錄需要置零的列// 第一遍遍歷矩陣,標記所有含有 0 的行和列for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(matrix[i][j] == 0){ row[i] = true;  // 標記該行需要置零col[j] = true;  // 標記該列需要置零}}}// 第二遍遍歷矩陣,根據標記的行和列將相應元素置零for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(row[i] || col[j]){ // 如果當前行或列被標記為需要置零matrix[i][j] = 0; // 置零操作}}}}
}

解題思路

1. 題目分析

給定一個 m × n 的矩陣,如果某個元素為 0,則需要將它所在的整行和整列的所有元素都設為 0。要求在原矩陣上直接修改,不能使用額外的矩陣存儲修改后的數據。

2. 解法思路

  • 第一步:標記所有需要置零的行和列

    • 用兩個數組 row[]col[] 分別記錄哪些需要置零。

    • 遍歷矩陣,如果遇到 matrix[i][j] == 0,就將 row[i]col[j] 標記為 true,表示該行或該列需要全部置零。

  • 第二步:遍歷矩陣,根據標記進行置零

    • 再次遍歷矩陣,如果 row[i]truecol[j]true,說明該位置 matrix[i][j] 需要置零。

3. 復雜度分析

  • 時間復雜度:O(m × n)

    • 需要兩次遍歷整個矩陣,時間復雜度為 O(m × n),符合題目要求。
  • 空間復雜度:O(m + n)

    • 額外使用了 row[]col[] 兩個數組,空間復雜度為 O(m + n)

4. 進階優化

如果希望減少額外空間使用,可以利用矩陣的第一行和第一列來存儲這些標記,而不使用額外的 row[]col[] 數組,進而將空間復雜度優化為 O(1)

問題與解答

[NOTE] 問題1:
if(row[i] || col[j])這一句我有一點不懂,為什么要么行或列被標記,就會被置0呢?
解答:
這個 if(row[i] || col[j]) 條件的作用是:如果當前元素所在的行 i 或列 j 需要置零,則將該元素 matrix[i][j] 置為 0


為什么這樣判斷?

想象一下矩陣的置零規則:

  • 如果一個元素 matrix[i][j] == 0,那么它所在的整行整列 都要變成 0
  • 在第一遍遍歷矩陣時,我們用 row[i] 記錄i 行是否需要全部變 0,用 col[j] 記錄j 列是否需要全部變 0
  • 因此,在第二遍遍歷時:
    • 如果 row[i] == true,說明該行有一個元素原本是 0,所以整行要變 0,當前元素 matrix[i][j] 也必須變 0
    • 如果 col[j] == true,說明該列有一個元素原本是 0,所以整列要變 0,當前元素 matrix[i][j] 也必須變 0
    • 只要滿足任意一個條件 (row[i]col[j]),當前元素 matrix[i][j] 必須變成 0

舉例分析

示例 1

輸入矩陣:

[[1, 1, 1],[1, 0, 1],[1, 1, 1]
]

第一遍標記 row[]col[]

row = [false, true, false]  // 第 1 行(索引 1)需要置零
col = [false, true, false]  // 第 1 列(索引 1)需要置零

第二遍遍歷并置零(應用 if(row[i] || col[j])

[[1, 0, 1],  // 因為 col[1] = true,第二列所有元素變 0[0, 0, 0],  // 因為 row[1] = true,整行變 0[1, 0, 1]   // 因為 col[1] = true,第二列所有元素變 0
]

總結

  • row[i] 記錄行是否要變 0col[j] 記錄列是否要變 0
  • if(row[i] || col[j]) 的含義是:
    • 如果這一行之前有 0,則當前行的所有元素都要變 0
    • 如果這一列之前有 0,則當前列的所有元素都要變 0
    • 如果當前行或列任意一個需要變 0,那么 matrix[i][j] 也必須變 0。
  • 這樣就符合題目的要求,用 兩次遍歷 實現 原地置零

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898692.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898692.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898692.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java基礎編程練習第34題-正則表達式

在Java里&#xff0c;正則表達式是一種強大的文本處理工具&#xff0c;它可以用于字符串的搜索、替換、分割和校驗等操作。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。Java通過java.util.regex包提供了對正則表達式的支持。 以下是正則表達式在Jav…

基于基于eFish-SBC-RK3576工控板的智慧城市邊緣網關

此方案充分挖掘eFish-SBC-RK3576的硬件潛力&#xff0c;可快速復制到智慧園區、交通樞紐等場景。 方案亮點 ?接口高密度?&#xff1a;單板集成5GWiFi多路工業接口&#xff0c;減少擴展復雜度。?AIoT融合?&#xff1a;邊緣端完成傳感器數據聚合與AI推理&#xff0c;降低云端…

redis解決緩存穿透/擊穿/雪崩

文章目錄 1.緩存穿透1.1 概念1.2 解決方案1.2.1 緩存空對象1.2.2 布隆過濾 1.2 店鋪查詢使用緩存穿透解決方案1.2.1 流程 2.緩存雪崩2.1 什么是緩存雪崩&#xff1f;2.2 雪崩解決方案 3.緩存擊穿3.1 什么是緩存擊穿&#xff1f;3.2解決方案3.2.1 基于互斥鎖解決緩存擊穿問題&am…

第十六屆藍橋杯康復訓練--6

題目鏈接&#xff1a;790. 數的三次方根 - AcWing題庫 思路&#xff1a;二分&#xff0c;注意正負號和小數判斷退出的方法&#xff08;雖然正負無所謂&#xff09; 代碼&#xff1a; #include<bits/stdc.h> using namespace std;#define exs 0.00000018812716007232667…

Vue學習筆記集--路由

路由 Vue Router 是 Vue.js 官方的路由管理器&#xff0c;用于在 Vue 應用程序中實現單頁面應用&#xff08;SPA&#xff09;的路由功能。以下是 Vue Router 的基本使用方法&#xff1a; 安裝 Vue Router 如果你使用的是 Vue 2&#xff0c;可以通過 npm 安裝 Vue Router&…

【AVRCP】深度剖析 AVRCP 中 Generic Access Profile 的要求與應用

目錄 一、GAP基礎架構與核心要求 1.1 GAP在藍牙體系中的定位 1.2 核心模式定義 二、AVRCP對GAP的增強要求 2.1 模式擴展規范 2.2 空閑模式過程支持 三、安全機制實現細節 3.1 認證與加密流程 3.2 安全模式要求 四、設備發現與連接建立 4.1 發現過程狀態機 4.2 連接…

冒排排序相關

先說一個阿里云學生無門檻免費領一年2核4g服務器的方法&#xff1a; 阿里云服務器學生無門檻免費領一年2核4g_阿里云學生認證免費服務器-CSDN博客 當談到排序算法時&#xff0c;冒泡排序&#xff08;Bubble Sort&#xff09;是最簡單且最基礎的排序算法之一。它的原理是依次比…

【Linux 下的 bash 無法正常解析, Windows 的 CRLF 換行符問題導致的】

文章目錄 報錯原因&#xff1a;解決辦法&#xff1a;方法一&#xff1a;用 dos2unix 修復方法二&#xff1a;手動轉換換行符方法三&#xff1a;VSCode 或其他編輯器手動改 總結 這個錯誤很常見&#xff0c;原因是你的 wait_for_gpu.sh 腳本 文件格式不對&#xff0c;具體來說…

SOFABoot-07-版本查看

前言 大家好&#xff0c;我是老馬。 sofastack 其實出來很久了&#xff0c;第一次應該是在 2022 年左右開始關注&#xff0c;但是一直沒有深入研究。 最近想學習一下 SOFA 對于生態的設計和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概覽 SOFABoot-01-螞蟻金服開源的 s…

DeepSeek和Kimi在Neo4j中的表現

以下是2個最近爆火的人工智能工具&#xff0c; DeepSeek:DeepSeek Kimi: Kimi - 會推理解析&#xff0c;能深度思考的AI助手 1、提示詞&#xff1a; 你能幫我生成一個知識圖譜嗎&#xff0c;等一下我會給你一篇文章&#xff0c;幫我從內容中提取關鍵要素&#xff0c;然后以N…

相機光學中一些疑難問題的解釋

工業機器視覺系統廣泛應用于自動化生產、質量控制、物體檢測等領域&#xff0c;而光學原理和鏡頭選擇是確保其精準度和高效性的關鍵因素。 1. 為什么鏡頭的最大光圈處通常成像不佳&#xff1f; 在許多攝影場景中&#xff0c;最大光圈&#xff08;例如F1.2、F1.8&#xff09;是…

藍橋杯高頻考點——并查集(心血之作)

并查集 TA Can Do What & why learningwhatwhy 原理和結構路徑壓縮例題講解題解solution 1&#xff08;50分&#xff09;solution 2&#xff08;100分&#xff09; 按秩(樹高)合并按大小合并 TA Can Do What & why learning what 并查集主要是解決連通塊的問題&#x…

抖音視頻數據獲取實戰:從API調用到熱門內容挖掘

在短視頻流量為王的時代&#xff0c;掌握抖音熱門視頻數據已成為內容運營、競品分析及營銷決策的關鍵。本文將手把手教你通過抖音開放平臺API獲取視頻詳情數據&#xff0c;并提供完整的代碼實現及商業化應用思路。 一、抖音API權限申請與核心接口 抖音API需企業資質認證&…

香橙派連接攝像頭過程

在香橙派上下載NoMachine 在控制電腦上也下載NoMachine sudo nmcli dev wifi connect "你的WiFi名稱" password "你的WiFi密碼" 連接上wifi后就可以在NoMachine連上香橙派了 &#xff08;不過前提是香橙派有安裝桌面端系統&#xff08;非僅窗口端&…

SOFABoot-08-啟動加速

前言 大家好&#xff0c;我是老馬。 sofastack 其實出來很久了&#xff0c;第一次應該是在 2022 年左右開始關注&#xff0c;但是一直沒有深入研究。 最近想學習一下 SOFA 對于生態的設計和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概覽 SOFABoot-01-螞蟻金服開源的 s…

簡單實用!百度AI + Raphael AI = 免費生圖

簡單實用&#xff01;百度AI Raphael AI 免費生圖 -- ![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/b55eda9141d34697b05db0cd60f62b75.png#pic_center) 第一步&#xff1a;下載或截取一些好看的圖片當參考圖片 第二步&#xff1a;用百度AI描述你想要的圖片&…

React中組件通訊與插槽

一、為DOM組件設置Props 1.用JSX語法對標簽的類名進行設置屬性名是className&#xff1b; 2.用JSX語法對標簽的樣式進行設置要使用鍵值對進行設置&#xff0c;帶“-”時用小駝峰方法來書寫&#xff1b; 3.當一個標簽的屬性過多時&#xff0c;可以通過JSX語法進行展開設置&am…

自定義reset50模型轉換到昇騰om

目錄 原始轉換腳本 腳本運行報錯 基于reset50 模型的自定義網絡 基本網絡結構 卷積模塊定義示例 Bottleneck定義示例 網絡定義示例 改進的轉換腳本 腳本運行報錯channels不匹配 腳本運行報錯維度不匹配 模型輸入數據的類型 tensor size NCHW和NHWC 自定義網絡的通…

vue3:十一、主頁面布局(進入指定菜單頁面,默認鎖定到左側菜單)

一、效果 直接進入home頁面&#xff0c;直接展開對應的菜單項 二、具體實現 1、菜單容器增加默認選中變量 在菜單容器中將默認展開菜單default-openeds修改為默認選中菜單default-active 2、引入useRoute方法 引入該方法為了獲取當前頁面的路徑 import { useRoute } from …

六十天前端強化訓練之第二十七天之Pinia 狀態管理全解與購物車實戰案例

歡迎來到編程星辰海的博客講解 看完可以給一個免費的三連嗎&#xff0c;謝謝大佬&#xff01; 目錄 一、Pinia 深度解析 1. Pinia 核心設計 2. 核心概念圖解 3. Store 類型對比 Option Store&#xff08;選項式&#xff09; Setup Store&#xff08;組合式&#xff09; …