LeetCode熱題100——矩陣

73.矩陣清零

題目

給定一個 *m* x *n* 的矩陣,如果一個元素為 0 ,則將其所在行和列的所有元素都設為 0 。請使用 原地 算法

示例 1:

img

輸入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
輸出:[[1,0,1],[0,0,0],[1,0,1]]

示例 2:

img

輸入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]

思路

第一次把滿足條件的行和列用set存下來,第二次遍歷即可,O(n^2)

代碼如下:

class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {unordered_set<int> a,b;for(int i = 0;i<matrix.size();i++){for(int j = 0;j<matrix[0].size();j++){if(matrix[i][j] == 0){a.insert(i);b.insert(j);}}}for(int i = 0;i<matrix.size();i++){for(int j = 0;j<matrix[0].size();j++){if(a.count(i) != 0 || b.count(j) != 0){matrix[i][j] = 0;}}}}
};

54.螺旋矩陣

題目

給你一個 mn 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。

示例 1:

img

輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出:[1,2,3,6,9,8,7,4,5]

示例 2:

img

輸入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
輸出:[1,2,3,4,8,12,11,10,9,5,6,7]

思路

這個應該是很常見的一道題了,,,感覺頻率很高,我習慣了一套模板就是把left,right,top和button確定下來,然后從左到右,從上到下,從右往左,從下往上遍歷即可

代碼如下:

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int left = 0,right = matrix[0].size()-1;int top = 0,button = matrix.size()-1;vector<int> ans;while(true){for(int i = left;i<right+1;i++){ans.emplace_back(matrix[top][i]);}top++;if(top > button) break;for(int i = top;i<button+1;i++){ans.emplace_back(matrix[i][right]);}right--;if(right < left) break;for(int i = right;i>left-1;i--){ans.emplace_back(matrix[button][i]);}button--;if(button < top) break;for(int i = button;i>top-1;i--){ans.emplace_back(matrix[i][left]);}left++;if(left > right)break;}return ans; }
};

48.旋轉圖像

題目

給定一個 n × n 的二維矩陣 matrix 表示一個圖像。請你將圖像順時針旋轉 90 度。

你必須在?原地 旋轉圖像,這意味著你需要直接修改輸入的二維矩陣。請不要 使用另一個矩陣來旋轉圖像。

示例 1:

img

輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:

img

輸入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
輸出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

思路

因為不能使用另一個矩陣來記錄,事實上很容易發現下標規律是[i,j] -> [j,n-1-i],不過其實可以上下翻轉一次再左上角和右下角翻轉一次會是同樣的效果,O(n^2)

代碼如下:

class Solution {
public:void rotate(vector<vector<int>>& matrix) {for(int i = 0;i<matrix.size()/2;i++){for(int j = 0;j < matrix[0].size();j++){int tmp = matrix[i][j];matrix[i][j] = matrix[matrix.size()-1-i][j];matrix[matrix.size()-1-i][j] = tmp;}}for(int i = 0;i<matrix.size();i++){for(int j = i+1;j<matrix[0].size();j++){swap(matrix[i][j],matrix[j][i]);}}}
};

240.搜索二維矩陣II

題目

編寫一個高效的算法來搜索 *m* x *n* 矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性:

  • 每行的元素從左到右升序排列。

  • 每列的元素從上到下升序排列。

示例 1:

img

輸入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
輸出:true

示例 2:

img

輸入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
輸出:false

思路

發現規律,從右上角觀察發現,利用i和j的加和減可以遍歷整個矩陣

如果找到則返回true即可

代碼如下:

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int n = matrix.size();int m = matrix[0].size();int i = 0,j = m-1;while(i < n && j > -1){if(matrix[i][j] < target) i++;else if(matrix[i][j] > target) j--;else{return true;}}return false;}
};

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

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

相關文章

【Linux】端口映射

外部訪問http://127.0.0.1&#xff08;默認端口80&#xff09; 實際訪問http://127.0.0.1:8080 //添加規則 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 //移除規則 iptables -t nat -L -nv --line-numbers iptables -t nat -D PREROUT…

HTML+CSS 玻璃按鈕

效果演示 Code <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>玻璃按鈕</title><li…

期權課程之第二節【買方和賣方的誤區和區別】

期權和股票不一樣&#xff0c;我們玩股票大部分情況我們只會做買方&#xff0c; 看漲多買點&#xff0c;看跌了減倉&#xff0c;或者直接離場&#xff0c;就算不看好的公司&#xff0c;一般也不會嘗試賣空股票的操作&#xff0c;但是期權不一樣&#xff0c;我們不僅能做買方還可…

設計模式 17 組合模式 Composite Pattern

設計模式 17 組合模式 Composite Pattern 1.定義 組合模式&#xff08;Composite Pattern&#xff09;&#xff0c;又叫部分整體模式&#xff0c;是用于把一組相似的對象當作一個單一的對象。組合模式依據樹形結構來組合對象&#xff0c;用來表示部分以及整體層次。這種類型的設…

window好用的網速工具

這是一個用于顯示當前網速、CPU及內存利用率的桌面懸浮窗軟件&#xff0c;并支持任務欄顯示&#xff0c;支持更換皮膚。 github鏈接如下 https://github.com/zhongyang219/TrafficMonitor?tabreadme-ov-file

無人機飛手:ASFC無人機和航模愛好者證書詳解

ASFC無人機和航模愛好者證書是由中國航空運動協會&#xff08;ASFC&#xff09;頒發的一種無人機操作資格認證。這種證書在無人機和航模愛好者群體中享有廣泛的認可度&#xff0c;并被視為操作無人機的一種重要資質。 ASFC證書的定義和用途十分明確。它是民航局頒發的民用無人駕…

springboot3微服務下結合springsecurity的認證授權實現

1. 簡介 在微服務架構中&#xff0c;系統被拆分成許多小型、獨立的服務&#xff0c;每個服務負責一個功能模塊。這種架構風格帶來了一系列的優勢&#xff0c;如服務的獨立性、彈性、可伸縮性等。然而&#xff0c;它也帶來了一些挑戰&#xff0c;特別是在安全性方面。這時候就體…

【前端筆記】Vue項目報錯Error: Cannot find module ‘webpack/lib/RuleSet‘

網上搜了下發現原因不止一種&#xff0c;這里僅記錄本人遇到的原因和解決辦法&#xff0c;僅供參考 原因&#xff1a;因為某種原因導致本地package.json中vue/cli與全局vue/cli版本不同導致沖突。再次提示&#xff0c;這是本人遇到的&#xff0c;可能和大家有所不同&#xff0c…

一張圖片中有多個一樣的目標物體,分別進行識別定位分割(Python實現)

需求&#xff1a; 一張圖片中有多個目標物體&#xff0c;將多個目標物體進行識別分割定位 import cv2 import numpy as npdef show_photo(name,picture):cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img_path r"test3.png" img cv2.imread(img…

關于微信小程序低功耗藍牙ECharts實時刷新

最近搞了這方面的東西&#xff0c;是剛剛開始接觸微信小程序&#xff0c;因為是剛剛開始接觸藍牙設備&#xff0c;所以這篇文章適合既不熟悉小程序&#xff0c;又不熟悉藍牙的新手看。 項目要求是獲取到藍牙傳輸過來的數據&#xff0c;并顯示成圖表實時顯示&#xff1b; 我看了…

轉運機器人負載最高可達 1000kg,重復精度高達±5mm

轉運機器人&#xff0c;內部搭載ICD系列核心控制器&#xff0c;擁有不同的移載平臺&#xff0c;負載最高可達 1000kg;重復精度高達5mm;支持 Wi-Fi漫游&#xff0c;實現更穩健的網絡數據交互;無軌化激光 SLAM 導航&#xff0c;配合 3D 避障相機等多傳感器進行安全防護。轉運器人…

java中使用jedis連接redis

4.java中使用jedis連接redis

P1-機器學習的核心算法-九五小龐

核心算法 線性回歸算法 線性回歸是一種預測數值型數據的監督學習算法。它的基本思想是通過學習一個線性模型&#xff0c;使得模型能夠盡可能準確地預測實值輸出標記。在單變量線性回歸中&#xff0c;我們有一個特征&#xff08;或輸入變量&#xff09;和一個目標變量&#xf…

租賃系統|北京租賃系統|租賃軟件開發流程

在數字化時代的浪潮下&#xff0c;小程序成為了各行各業爭相探索的新領域。租賃行業亦不例外&#xff0c;租賃小程序的開發不僅提升了用戶體驗&#xff0c;更為商家帶來了更多商業機會。本文將詳細解析租賃小程序的開發流程&#xff0c;為有志于進軍小程序領域的租賃行業從業者…

Kubeblocks系列2-redis嘗試之出師未捷身先死

背景&#xff1a; 上一節&#xff0c;完成了Kubeblocks系列1-安裝。現在就想拿一個簡單的應用測試一下kubeblocks這個所謂的神器是否好用&#xff0c;是否可以應用與生產&#xff01; Kubeblocks系列2-redis嘗試 參照官方文檔&#xff1a;創建并連接到 Redis 集群 確保 Red…

【教程】Linux部署Android安卓模擬器

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 未完成&#xff0c; 先簡單記錄下指令。 docker-android https://github.com/budtmo/docker-android 檢查系統是否支持&#xff1a; sudo apt instal…

41-3 ddos 應急方法

一、常規DDoS應急辦法 定期掃描和清查安全漏洞:定期對網絡主節點進行掃描,及時清理可能存在的安全漏洞,以及新出現的漏洞。 檢查訪問者來源:通過反向路由器查詢的方法檢查訪問者的IP地址是否真實,如果不真實,則予以屏蔽,以防黑客攻擊使用假IP地址方式迷惑用戶。 在骨干節…

【C++】深入解析C++智能指針:從auto_ptr到unique_ptr與shared_ptr

文章目錄 前言&#xff1a;1. 智能指針的使用及原理2. C 98 標準庫中的 auto_ptr:3. C 11 中的智能指針循環引用&#xff1a;shared_ptr 定制刪除器 4. 內存泄漏總結&#xff1a; 前言&#xff1a; 隨著C語言的發展&#xff0c;智能指針作為現代C編程中管理動態分配內存的一種…

汽車液態電池隔膜的作用

標簽: 汽車液態電池隔膜的作用; 聚乙烯(PE);聚丙烯(PP) 問題:汽車液態電池隔膜的作用? 汽車液態電池隔膜的作用 汽車液態電池中的隔膜是一個至關重要的組件,它在電池的性能、安全性和壽命方面起著關鍵作用。下面詳細講述隔膜的主要功能和作用: 1. 電化學隔離 隔…

【面試干貨】猴子吃桃問題

【面試干貨】猴子吃桃問題 1、實現思想2、代碼實現 &#x1f496;The Begin&#x1f496;點點關注&#xff0c;收藏不迷路&#x1f496; 猴子吃桃問題&#xff1a;猴子第一天摘下若干個桃子&#xff0c;當即吃了一半&#xff0c;還不癮&#xff0c;又多吃了一個 二天早上又將剩…