矩陣算法題

矩陣算法題

    • 1、矩陣置零
    • 2、螺旋矩陣
    • 3、旋轉圖像
    • 4、搜索二維矩陣

1、矩陣置零

在這里插入圖片描述
解題思路:這道題核心是要確定哪些行和哪些列要置零。所以定義兩個數組,一個記錄要置零的行,一個記錄要置零的列。遍歷整個矩陣,如果當前位置是0的話,就令l[i]=1,r[j]=1,之后再遍歷l數組和r數組,并且對原數組置零。

class Solution {public void setZeroes(int[][] matrix) {int m = matrix.length;int n  = matrix[0].length;int []l = new int[m];int []r = new int[n];//找到要置零的行和列for(int i = 0;i<m;i++){for(int j=0;j<n;j++){if(matrix[i][j]==0){l[i]=1;r[j]=1;}}}//遍歷行,確定哪一行要置零for(int i = 0;i<m;i++){if(l[i]==1){for(int j =0;j<n;j++){matrix[i][j]=0;}}}//遍歷列,確定哪一列要置零for(int j = 0;j<n;j++){if(r[j]==1){for(int i =0;i<m;i++){matrix[i][j]=0;}}}}
}

2、螺旋矩陣

在這里插入圖片描述
解題思路:這道題要確定上下左右的邊界值,依次遍歷整個矩陣。

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> result = new ArrayList<>();int m = matrix.length;int n = matrix[0].length;int top = 0,bottom = m-1;int left = 0,right = n-1;while(top<=bottom&&left<=right){//加入上面的一行for(int j = left;j<=right;j++){result.add(matrix[top][j]);}top++;//加入左邊的一列for(int i = top;i<=bottom;i++){result.add(matrix[i][right]);}right--;//加入下面的一行if(top<=bottom){for(int j = right;j>=left;j--){result.add(matrix[bottom][j]);}bottom--;}//加入左邊的一列if(left<=right){for(int i = bottom;i>=top;i--){result.add(matrix[i][left]);}left++;}}return result;}
}

3、旋轉圖像

在這里插入圖片描述
解題思路:先將一行存儲到一個數組中去,依次遍歷整個矩陣,左列最后兩個到上行的左邊兩個,下列的最后兩個到左列的最后兩個,右列的上面兩個到下列的右邊兩個,上列存儲的到右列的上面兩個。

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;int left = 0;int right = n - 1;int top = 0;int bottom = n - 1;// 每一圈旋轉while (left < right && top < bottom) {int len = right - left;int[] tmp = new int[len];  // 保存當前層頂部行(不含最后一個元素)// 1. 保存 top 行的前 len 個元素(右上角那個位置留給最后賦值)for (int j = 0; j < len; j++) {tmp[j] = matrix[top][left + j];}// 2. 左列 → 上行for (int i = 0; i < len; i++) {matrix[top][left + i] = matrix[bottom - i][left];}// 3. 下行 → 左列for (int j = 0; j < len; j++) {matrix[bottom - j][left] = matrix[bottom][right - j];}// 4. 右列 → 下行for (int i = 0; i < len; i++) {matrix[bottom][right - i] = matrix[top + i][right];}// 5. tmp(原 top 行) → 右列for (int j = 0; j < len; j++) {matrix[top + j][right] = tmp[j];}// 收縮一圈left++;right--;top++;bottom--;}}
}

4、搜索二維矩陣

在這里插入圖片描述
解題思路:從右上角開始判斷,如果target小于這個數,就往左移,如果target大于這個數就往下移。因為最右上角是這一行的最大值,也是這一列的最小值。

class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length;int n = matrix[0].length;int top = 0;int right = n-1;while(top<m&&right>=0){if(target>matrix[top][right]){top++;}else if(target<matrix[top][right]){right--;}else{return true;}}return false;}
}

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

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

相關文章

Spring底層(二)Spring IOC容器加載流程原理

一、怎么理解SpringIoc IOC&#xff1a;Inversion Of Control&#xff0c;即控制反轉&#xff0c;是一種設計思想。之前對象又程序員自己new自己創建&#xff0c;現在Spring注入給我們&#xff0c;這樣的創建權力被反轉了。 所謂控制就是對象的創建、初始化、銷毀。 創建對象…

UDP中的單播,多播,廣播

文章目錄UDP 簡單回顧一、單播&#xff08;Unicast&#xff09;定義特點應用舉例二、廣播&#xff08;Broadcast&#xff09;定義特點應用三、多播&#xff08;Multicast&#xff09;定義特點應用UDP 單播、廣播、多播的對比總結額外說明代碼簡要示例&#xff08;C&#xff09;…

數據庫練習3

一、建立product表&#xff0c;操作方式operate表要求&#xff1a;1.定義觸發器實現在產品表(product)中每多一個產品,就在操作表(operate)中記錄操作方式和時間以及編號記錄。注&#xff1a;操作說明&#xff1a;標記執行delete 、insert、 update2.定義觸發器實現在產品表(pr…

pycharm和anaconda安裝,并配置python虛擬環境

1、pycharm和anaconda安裝 PyCharm與Anaconda超詳細安裝配置教程_anaconda pycharm安裝-CSDN博客https://blog.csdn.net/qq_32892383/article/details/116137730 2、pycharm漢化 PyCharm漢化&#xff1a;簡單兩步搞定&#xff01;PyCharm怎么設置中文簡體&#xff0c;為什么…

EP04:【Python 第一彈】函數編程

一、定義 函數指將一組語句的集合通過一個變量名封裝起來&#xff0c;調用這個函數變量名&#xff0c;就可以執行函數。 二、特點 減少重復邏輯代碼的編寫將程序中的邏輯可以進行擴展維護項目程序的代碼更簡單 三、創建 def 函數名():邏輯代碼1邏輯代碼2return 結果 函數名…

linux安裝Mysql后添加mysql的用戶和密碼

在 MySQL 中創建用戶并設置密碼的完整指南如下&#xff1a; 方法 1&#xff1a;使用 CREATE USER 語句&#xff08;推薦&#xff09; -- 創建新用戶并設置密碼 CREATE USER newuserlocalhost IDENTIFIED BY your_password;-- 授予權限&#xff08;示例&#xff1a;授予所有數據…

React hooks——memo

一、簡介React.memo 是 React 提供的一個高階組件&#xff08;Higher-Order Component&#xff09;&#xff0c;用于優化函數組件的渲染性能&#xff0c;它通過淺比較&#xff08;shallow compare&#xff09;props 的變化來決定是否重新渲染組件。1.1 基本用法const MyCompone…

leetcode15.三數之和題解:邏輯清晰帶你分析

介紹 題源 分析 1.雙指針固定一個數 首先明白一點&#xff0c;我們有三個數&#xff0c;我們想使用雙指針&#xff0c;那就必須固定一個數。 2.二分 本題還涉及二分&#xff0c;雙指針經常和二分結合使用&#xff08;二分本質就是雙指針&#xff0c;仔細思考這思考這句話&…

exports使用 package.json字段控制如何訪問你的 npm 包

目錄 想象一下你正在開發一個 npm 包…… 術語 什么是exports領域&#xff1f; exports好處 保護內部文件 多格式包 將子路徑映射到dist目錄 子路徑導出 單一入口點 多個入口點 公開軟件包文件的子集 有條件出口 設置使用條件 默認條件 句法 針對 Node.js 和瀏…

AngularJS 安裝使用教程

一、AngularJS 簡介 AngularJS 是 Google 開發的一款前端 JavaScript 框架&#xff0c;采用 MVVM 架構&#xff0c;提供了數據雙向綁定、依賴注入、模塊化、路由管理等強大功能&#xff0c;適合構建單頁面應用&#xff08;SPA&#xff09;。注意&#xff1a;AngularJS&#xf…

基于python和neo4j構建知識圖譜醫藥問答系統

一、pyahocorasick1.安裝 pyahocorasick 包&#xff1a; pip install pyahocorasick -i https://pypi.tuna.tsinghua.edu.cn/simple/pip install pyahocorasick &#xff1a;安裝名為 pyahocorasick 的第三方庫&#x1f449; 這個庫是一個 Aho-Corasick 多模匹配算法 的 Python…

片上網絡(NoC)拓撲結構比較

1. 拓撲結構拓撲結構延遲吞吐量跳數功耗面積開銷可擴展性容錯性布線復雜度適合通信模式Mesh&#xff08;網格&#xff09;低&#xff08;O(√N)&#xff09;高&#xff08;多路徑并行&#xff09;O(√N)中高&#xff08;路由器多&#xff09;中高&#xff08;規則布線&#xff…

git merge 命令有什么作用?具體如何使用?

回答重點git merge 命令主要用于將兩個分支的歷史和內容合并在一起。簡而言之&#xff0c;它會將一個分支的更改引入到當前分支中。常見的使用場景是將功能分支&#xff08;feature branch&#xff09;的修改合并回主分支&#xff08;main branch&#xff09;或者開發分支&…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - jieba庫分詞簡介及使用

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解 jieba庫分詞簡介及使用 視頻在線地址&…

大模型的后訓練與邏輯能力

《DeepSeek原生應用與智能體開發實踐》【摘要 書評 試讀】- 京東圖書 在人工智能與機器學習領域&#xff0c;模型的后訓練階段不僅是技術流程中的關鍵環節&#xff0c;更是提升模型性能&#xff0c;尤其是數學邏輯能力的“黃金時期”。這一階段&#xff0c;通過對已初步訓練好…

pycharm安裝教程-PyCharm2025安裝步驟【MAC版】附帶安裝包

pycharm安裝教程-PyCharm2025安裝詳細步驟【MAC版】安裝安裝包獲取&#xff08;文章末尾&#xff09;今天來給大家分享 Mac 系統安裝 PyCharm&#xff0c;附帶安裝包資源安裝&#xff0c; PyCharm 相關就不敘述了&#xff0c;直接開始安裝&#xff01; 安裝 2024版本、2025年…

【React Native】路由跳轉

Link 跳轉的路徑&#xff0c;就在href里寫/details。路徑都是相對于app目錄來寫的&#xff0c;也就是說app目錄就是/。很多時候&#xff0c;需要跳轉的組件比較復雜。比方說&#xff0c;要在里面要嵌套按鈕&#xff0c;或者其他東西。這種情況下&#xff0c;就可以在Link組件里…

使用 Spring Boot + AbstractRoutingDataSource 實現動態切換數據源

1. 動態切換數據源的原理AbstractRoutingDataSource 是 Spring 提供的一個抽象類&#xff0c;它通過實現 determineCurrentLookupKey 方法&#xff0c;根據上下文信息決定當前使用的數據源。核心流程如下&#xff1a;定義多數據源配置&#xff1a;注冊多個數據源。實現動態數據…

Kubernetes (K8S)知識詳解

Kubernetes (K8S) 是什么&#xff1f; Kubernetes 是 Google 在 2014 年開源的生產級別的容器編排技術&#xff08;編排也可以簡單理解為調度、管理&#xff09;&#xff0c;用于容器化應用的自動化部署、擴展和管理。它的前身是 Google 內部的 Borg 項目&#xff0c;Borg 是 …

在github上傳python項目,然后在另外一臺電腦下載下來后如何保障成功運行

如何在 GitHub 上傳并在另一臺電腦成功運行 Python 項目? 一、上傳前&#xff08;本地準備&#xff09; 在你的項目文件夾中進行以下準備&#xff1a; 1. 確保結構清晰 my_project/ ├── main.py ├── utils.py ├── config.yaml ├── requirements.txt └── README…