Python題解Leetcode Hot100之矩陣

1. 矩陣置零

  • 題目描述
    給定一個 m x n 的矩陣,如果一個元素為 0 ,則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。
    在這里插入圖片描述
  • 解題思路
    題目要求進行原地更改,也就是不能使用額外的空間,因此我們可以使用第一行的元素來記錄對應的每一列是不是該置零,用第一列的元素來記錄對應的每一行是不是該置零。但是這樣的話就會有一個問題,就是第一行和第一列的元素會被覆蓋,因此我們在覆蓋第一行和第一列的元素前,需要額外的兩個變量row_0_flag和col_0_flag來記錄第一行和第一列是不是該置零。
    時間復雜度:O(m*n) 空間復雜度:O(1)
  • 代碼
    class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""m = len(matrix)if m == 0:return n = len(matrix[0])# 在使用第一行和第一列進行記錄之前,先把第一行和第一列是否需要置零給求出來row_0_flag = Falsefor i in range(n):if matrix[0][i] == 0:row_0_flag = Truebreakcol_0_flag = Falsefor i in range(m):if matrix[i][0] == 0:col_0_flag = Truebreak# 使用第一行和第一列進行記錄for i in range(1, m):for j in range(1, n):if matrix[i][j] == 0:matrix[i][0] = 0matrix[0][j] = 0for i in range(1, m):for j in range(1, n):if (matrix[i][0] == 0 or matrix[0][j] == 0) and matrix[i][j] != 0:matrix[i][j] = 0if row_0_flag:for i in range(n):matrix[0][i] = 0if col_0_flag:for i in range(m):matrix[i][0] = 0
    

2. 螺旋矩陣

  • 題目描述
    給你一個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。
    在這里插入圖片描述
  • 解題思路
    1. 首先確認螺旋的圈數,圈數是(min(m, n) + 1) // 2,也就是最外層的循環數。
    2. 在每一圈中,我們需要分別從左到右,從上到下,從右到左,從下到上四個方向遍歷,在解題時可以現在紙上把每個方向遍歷的起始位置和終止位置寫出來,這樣就很容易寫出代碼。
    3. 注意在從右往左、從下到上遍歷的時候,要判斷是不是和從左往右、從上往下是不是一行,是一行的話就不用遍歷了。
      時間復雜度:O(m*n) 空間復雜度:O(1)
  • 代碼
    class Solution:def spiralOrder(self, matrix: List[List[int]]) -> List[int]:m = len(matrix)n = len(matrix[0])iters = (min(m, n) + 1) // 2res = []for i in range(iters):# 從左往右打印for j in range(i, n - i):res.append(matrix[i][j])# 從上往下打印for j in range(i + 1, m - i):res.append(matrix[j][n - 1 - i])# 從右往左打印,此時要判斷是不是和從左往右打印的是一行,是一行的話很明顯就不用打印了if m - i - 1 > i:for j in range(n - 2 - i, i - 1, -1):res.append(matrix[m - i - 1][j])# 從下往上打印,此時要判斷是不是和從上往下打印是一列,是一列的話很明顯就不用打印了if i < n - 1 - i:for j in range(m - i - 2, i, -1):res.append(matrix[j][i])return res

3. 旋轉圖像

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

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

  • 解題思路
    先轉置,再左右鏡像

  • 代碼

    class Solution:def rotate(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""n = len(matrix)# 轉置for i in range(n):for j in range(i + 1, n):matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]# 左右鏡像for i in range(n):l, r = 0, n - 1while l < r:matrix[i][l], matrix[i][r] = matrix[i][r], matrix[i][l]l += 1r -= 1
    

4. 搜索二維矩陣 II

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

    每行的元素從左到右升序排列。
    每列的元素從上到下升序排列。
    在這里插入圖片描述

  • 解題思路
    二分查找:從左上角開始搜索,小于target的話向下查找,大于target的話向左查找

  • 代碼

    class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:m = len(matrix)n = len(matrix[0])i = 0j = n - 1while i < m and j >= 0:if matrix[i][j] == target:return Trueelif matrix[i][j] > target:j -= 1else:i += 1return False
    

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

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

相關文章

Cesium常見設置視角所用到函數

1.左鍵拾取經緯度坐標 const handler new Cesium.ScreenSpaceEventHandler(viewer.canvas)// 監聽鼠標點擊事件handler.setInputAction(function (click) {// 使用pick函數獲取點擊位置的實際位置var cartesian viewer.scene.pickPosition(click.position);if (Cesium.defin…

【LeetCode】十二、遞歸:斐波那契 + 反轉鏈表

文章目錄 1、遞歸2、leetcode509&#xff1a;斐波那契數列3、leetcode206&#xff1a;反轉鏈表4、leetcode344&#xff1a;反轉字符串 1、遞歸 函數自己調用自己 遞歸的4個點&#xff1a; 遞歸的例子&#xff1a;給一個數n&#xff0c;在斐波那契數列中&#xff0c;找到n對應的…

科研與英文學術論文寫作指南——于靜老師課程

看到了一個特別棒的科研與英文學術論文寫作指南&#xff0c;理論框架實例。主講人是中科院信息工程研究所的于靜老師。推薦理由&#xff1a;寫論文和讀論文或者講論文是完全不一樣的&#xff0c;即使現在還沒有發過論文&#xff0c;但是通過于老師的課程&#xff0c;會給后續再…

LSTM水質預測模型實踐

0 引言 隨著水質自動站的普及&#xff0c;監測頻次越來越高&#xff0c;自動監測越來越準確。 水質站點增多&#xff0c;連續的水質監測數據&#xff0c;給水質預測提供更多的訓練基礎。 長短時記憶網絡(LSTM)適用于多變量、連續、自相關的數據預測。 人工神經網絡模型特點為的…

使用requests爬取拉勾網python職位數據

爬蟲目的 本文是想通過爬取拉勾網Python相關崗位數據&#xff0c;簡單梳理Requests和xpath的使用方法。 代碼部分并沒有做封裝&#xff0c;數據請求也比較簡單&#xff0c;所以該項目只是為了熟悉requests爬蟲的基本原理&#xff0c;無法用于穩定的爬蟲項目。 爬蟲工具 這次…

LVS 負載均衡群集

一&#xff1a;LVS群集應用基礎 1.1&#xff1a;概述 1.群集的類型 無論是哪種群集&#xff0c; 都至少包括兩臺節點服務器&#xff0c; 而對外表現為一個整體&#xff0c; 只提供一個訪問入口。根據群集所針對的目標差異&#xff0c; 可分為以下三種類型。 負載均衡群集&a…

使用U盤重裝系統

目錄 一、 制作啟動盤 1. 準備一個U盤和一臺電腦 2. 下載win10安裝包 二、安裝操作系統 1. 插入系統安裝盤 2. 通過進入BIOS界面進入到我們自己制作的啟動盤上 三、安裝成功后進行常規設置 一、 制作啟動盤 1. 準備一個U盤和一臺電腦 注意&#xff1a;提前備份好U盤內的…

jQuery Tooltip 插件使用教程

jQuery Tooltip 插件使用教程 引言 jQuery Tooltip 插件是 jQuery UI 套件的一部分,它為網頁元素添加了交互式的提示框功能。通過這個插件,開發者可以輕松地為鏈接、按鈕、圖片等元素添加自定義的提示信息,從而增強用戶的交互體驗。本文將詳細介紹如何使用 jQuery Tooltip…

JDK1.8下載、安裝與配置完整圖文2024最新教程

一、報錯 運行Pycharm時&#xff0c;報錯No JVM installation found. Please install a JDK.If you already have a JDK installed, define a JAVA_HOME variable in Computer >System Properties > System Settings > Environment Variables. 首先可以檢查是否已安裝…

【C語言】qsort()函數詳解:能給萬物排序的神奇函數

&#x1f984;個人主頁:修修修也 &#x1f38f;所屬專欄:C語言 ??操作環境:Visual Studio 2022 目錄 一.qsort()函數的基本信息及功能 二.常見的排序算法及冒泡排序 三.逐一解讀qsort()函數的參數及其原理 1.void* base 2.size_t num 3.size_t size 4.int (*compar)(c…

2024西安國際儲能產業博覽會將于12月5日開幕!

2024西部國際儲能產業博覽會 同期舉辦&#xff1a;2024西部國際氫能源及燃料電池產業博覽會 2024年12月5-7日 西安國際會展中心 規劃展會規模&#xff1a; 50,000 ㎡ 450 60000人次 20場 展區面積 預邀展商 專業觀眾 行業…

節水增效,蜂窩物聯智能灌溉助力農業升級!

智能灌溉的優勢主要體現在以下幾個方面&#xff1a; 1. 提高效率&#xff1a;智能灌溉可以根據作物生長的不同階段和環境條件自動調整灌溉時間和水量&#xff0c;減少人工干預的頻率和時間&#xff0c;提高了灌溉效率。 2. 節約水資源&#xff1a;智能灌溉可以根據土壤濕度和…

Python爬蟲實戰案例——王者榮耀皮膚抓取

大家好&#xff0c;我是你們的老朋友——南楓&#xff0c;今天我們一起來學習一下該如何抓取大家經常玩的游戲——王者榮耀里面的所有英雄的皮膚。 老規矩&#xff0c;直接上代碼&#xff1a; 導入我們需要使用到的&#xff0c;也是唯一用到的庫&#xff1a; 我們要抓取皮膚其…

網絡物理隔離

網絡物理隔離是網絡安全領域中的一種基本策略&#xff0c;其核心目的是通過物理方式將網絡或網絡設備分隔開來&#xff0c;以確保數據安全、降低風險并提升系統的整體安全性。網絡物理隔離不僅防止了未經授權的訪問&#xff0c;也顯著降低了來自外部或內部威脅的風險。以下是網…

每天一個數據分析題(四百)- 一元線性回歸模型

評價一元線性回歸模型擬合程度時&#xff0c;主要根據&#xff08; &#xff09;的數值 A. 相關系數 B. R2 C. SSE D. SSR 數據分析認證考試介紹&#xff1a;點擊進入 題目來源于CDA模擬題庫 點擊此處獲取答案 數據分析專項練習題庫 內容涵蓋Python&#xff0c;SQL&…

大陸ARS548使用記錄

一、Windows連接上位機 雷達是在深圳路達買的&#xff0c;商家給的資料中首先讓配置網口&#xff0c;但我在使用過程中一直出現無法連接上位機的情況。接下來說說我的見解和理解。 1.1遇到的問題 按要求配置好端口后上位機無連接不到雷達&#xff0c;但wireshark可以正常抓到數…

PyPDF2拆分PDF文件的高級應用:指定拆分方式

本文目錄 前言一、拆分方式選擇1、代碼講解2、實現效果圖3、完整代碼前言 前兩篇文章,分別講解了將使用PyPDF2將PDF文檔分割成為單個頁面、在分割PDF文檔時指定只分割出指定頁面,如果你還沒有看過,然后有需要的話,可以去看一下,我把文章鏈接貼到這里: PyPDF2拆分PDF文件…

Nuxt3 的生命周期和鉤子函數(九)

title: Nuxt3 的生命周期和鉤子函數&#xff08;九&#xff09; date: 2024/7/3 updated: 2024/7/3 author: cmdragon excerpt: 摘要&#xff1a;本文介紹了Nuxt3中與Vite相關的五個生命周期鉤子&#xff0c;包括vite:extend、vite:extendConfig、vite:configResolved、vite…

CVE-2024-6387漏洞預警:盡快升級OpenSSH

OpenSSH維護者發布了安全更新&#xff0c;其中包含一個嚴重的安全漏洞&#xff0c;該漏洞可能導致在基于glibc的Linux系統中使用root權限執行未經身份驗證的遠程代碼。該漏洞的代號為regreSSHion&#xff0c;CVE標識符為CVE-2024-6387。它駐留在OpenSSH服務器組件&#xff08;也…

雙階段目標檢測算法:精確與效率的博弈

雙階段目標檢測算法&#xff1a;精確與效率的博弈 目標檢測是計算機視覺領域的一個核心任務&#xff0c;它涉及在圖像或視頻中識別和定位多個對象。雙階段目標檢測算法是一種特殊的目標檢測方法&#xff0c;它通過兩個階段來提高檢測的準確性。本文將詳細介紹雙階段目標檢測算…