代碼隨想錄算法訓練營第三十九天|62.不同路徑 63.不同路徑ll

62.不同路徑:

文檔講解:代碼隨想錄|62.不同路徑

視頻講解:https://www.bilibili.com/video/BV1ve4y1x7Eu

狀態:已做出

一、題目要求:

一個二維數組里,將(0,0)位置下標作為起點,計算到達最右下角位置的方式一共有多少種。

二、常見錯誤:

容易把dp數組的初始化設置錯誤,如果設置的二維數組dp只是初始化一個位置就會出現錯誤,仔細觀察題目就可以得知只能向下向右移動,所以初始化需要對第一行和第一列的所有元素都進行初始化才正確。

三、解題思路:

根據五個步驟來分析,第一個步驟是確定dp數組的含義,dp數組是從(0,0)到(i,j)位置的方法有dp[i][j]種。第二步是確定推導公式,根據題目要求,每次移動只能向右或者向下移動,所以一個位置的到達方式收到上面或者左邊的格子影響,那么推導公式就是dp[i][j]=dp[i-1][j]+dp[i][j-1]。第三步則是初始化dp數組,既然格子只能向右或者向下移動,那么第一行和第一列的所有格子到達的方式都只有一種,所以需要初始化第一行和第一列所有元素為1。第四步則是確定循環順序,根據推導公式,順序可以一行一行的遍歷,循環的i和j都從1開始遍歷到結束。最后一步舉例出dp正確的元素和代碼得出的進行對比既可。

四、代碼實現:

class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int>>dp(m, vector<int>(n,1));  //創建二維數組dp,并把所有元素都初始化為1for(int i=1;i<m;++i) {for(int j=1;j<n;++j) {dp[i][j]=dp[i][j-1]+dp[i-1][j];   //當前位置的到達方式種類靠左邊和上面位置dp值確定}}return dp[m-1][n-1];}
};

五、代碼復雜度:

代碼的整體時間復雜度是O(m*n),因為要遍歷二維數組的所有元素。
代碼的空間復雜度是O(m*n),因為需要創建一個m*n大小的二維數組。

六、收獲:

之前做的一維數組的動歸和這次二維數組在很多地方都有所不同,更加復雜。前面題目一維數組在推導公式上只要考慮前兩個元素,這道題目二維數組需要考慮上和左的元素,并且初始化也有很大的區別,一維數組只要對第一個元素初始化,而二維數組去要對第一行和第一列都進行初始化,從一維數組進階到二維數組的動規,能更加熟練的設置dp數組。

63.不同路徑:

文檔講解:代碼隨想錄|63.不用路徑ll

視頻講解:https://www.bilibili.com/video/BV1Ld4y1k7c6

狀態:已做出

一、題目要求:

要求從下標(0,0)開始,到最右下角的方法有多少種,其中格子有可能會有阻礙。

二、常見錯誤:

這道題目最容易犯的錯誤就是初始化第一行和第一列的時候沒有把出現障礙后的所有元素都初始化為零,因為第一行或者第一列中途出現了障礙,后面的格子就不可能到達,所以直接初始化為0。

三、解題思路:

五個步驟和上一道題目基本相同,就是第三步初始化有區別,需要對障礙物進行正確處理,將障礙物后面的所有元素都初始化為零就正確了。循環遍歷如果出現障礙物,此處的dp就賦值為零。

四、代碼實現:

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m=obstacleGrid.size();   //變量m用來記錄行數int n=obstacleGrid[0].size();  //變量n用來記錄列數vector<vector<int>>dp(m,vector<int>(n,0));   //創建二維數組dp,先對所有的元素初始化為零//下面這個循環對第零行進行初始化,遇到障礙物后面的所有dp元素都不改變,為零for(int i=0;i<m;++i) {if(obstacleGrid[i][0]) break;else dp[i][0]=1;}//這里是對第零列的所有元素進行初始化,規則和行的初始化一樣for(int i=0;i<n;++i) {if(obstacleGrid[0][i]) break;else dp[0][i]=1;}for(int i=1;i<m;++i) {for(int j=1;j<n;++j) {if(obstacleGrid[i][j]) continue;   //當遇到障礙物,直接跳過這個位置dp[i][j]=dp[i][j-1]+dp[i-1][j];   //不是障礙物就進行賦值}}return dp[m-1][n-1];}
};

五、代碼復雜度:

時間復雜度為O(m*n),空間復雜度為O(m*n),m為行數,n為列數。

六、收獲:

這道題目是上一道題目的加強版,加入了障礙物,更考驗對初始化操作的熟練度,通過兩道題目的練習,對二維數組的動規有了更深的認識。

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

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

相關文章

openEuler2403安裝部署Prometheus和Grafana

文章目錄openEuler2403安裝部署Prometheus和Grafana一、前言1.簡介2.環境二、正文1.環境準備1&#xff09;JDK 安裝部署&#xff08;可選&#xff09;2&#xff09;關閉防火墻2.安裝 Prometheus1&#xff09;下載和安裝2&#xff09;啟動3&#xff09;systemd服務管理3.安裝 Gr…

樂吾樂大屏可視化組態軟件【SQL數據源】

樂吾樂大屏可視化組態軟件&#xff08;大屏可視化設計器 - 樂吾樂Le5le&#xff09;支持直接對接SQL數據源功能&#xff0c;目前僅對企業源碼客戶開放。 配置SQL數據源 管理員進入可視化管理中心&#xff0c;點擊SQL數據源&#xff0c;配置添加SQL數據源。 創建SQL數據源連接 …

Django高效查詢:values_list實戰詳解

Django 實戰案例 講解 values_list 的用法。 values_list("field", flatTrue) → 獲取單字段的一維列表。values_list("f1", "f2") → 獲取多個字段&#xff0c;返回元組。搭配 filter / distinct / in / 外鍵查詢 非常高效。適合用于 導出數據 …

Java數據結構——樹

一、樹型結構1.1 概念我們之前提到的數組&#xff0c;單鏈表&#xff0c;棧和隊列都是一種線性結構&#xff0c;每個元素都有最多一個后繼節點。而樹型結構是一種非線性結構&#xff0c;它是由n&#xff08;n>0&#xff09;節點組成的一個具有層次關系的集合。它之所以叫做樹…

基于LLM的月全食時空建模與智能預測:從天文現象到深度學習融合

當古老的天文學遇上現代人工智能,會碰撞出怎樣的火花? 一、當月球遇見AI 月全食,這一令人驚嘆的天文現象,自古以來就吸引著無數天文學家和愛好者的目光。當地球恰好運行到太陽和月球之間,完全遮擋太陽光時,我們就能目睹月球逐漸被"吞噬"然后又重煥光彩的奇妙…

LeetCode熱題 42.接雨水

題目 思路&#xff1a; 通過畫圖觀察我們其實可以很容易發現&#xff0c;每個柱子接多少水由這個地方左邊最高的柱子和右邊最高的柱子確定&#xff0c;因為總要形成一個坑嘛&#xff0c;然后就能接著確定&#xff1a; 當前柱子接水量 min(左邊最高柱子的高度, 右邊最高柱子的…

PostgreSQL與Greenplum數據庫的編程語言連接

編程語言連接數據庫 目前數據庫一般支持HA的連接&#xff0c;即一個Coordinator內的一個節點異常后會鏈接到另外的一個節點&#xff0c;不會影響業務的正常運行。在JDBC配置時需要采用 高可用鏈接字符串(Connection URL/DSN) 的方式連接。適用于不同的編程語言中使用&#xff…

后端(JDBC)學習筆記(CLASS 1):基礎篇(一)

一、引言1、數據的存儲開發java程序的時候&#xff0c;數據都是存儲在內存中&#xff0c;屬于臨時存儲&#xff0c;當程序停止或重啟時&#xff0c;內存中的數據就丟失了。為了解決數據的長期存儲問題&#xff0c;有如下解決方案&#xff1a;1、數據通過I/O流技術&#xff0c;存…

卷對卷(Roll-to-Roll,R2R)技術的應用領域和技術進展

目錄&#xff1a;第一節&#xff1a;卷對卷技術及其應用領域和工藝要求一、卷對卷技術發展現概述二、卷對卷研發和規模化應用難點重點和發展趨勢三、卷對卷工藝主要應用領域及工藝要求第二節&#xff1a;卷對卷生產工藝參數及質量控制四、卷對卷生產工藝控制參數和條件五、卷對…

【Ansible】管理變量和事實知識點

1.Ansible變量名由什么組成&#xff1f;答&#xff1a;變量名必須以字母開頭&#xff0c;且只能含有字母、數字和下劃線。2.定義變量的方法及變量的優先級&#xff1f;答&#xff1a;按優先級從低到高排列: 在清單中定義的組變量 < 在清單或playbook所在目錄的group_vars子目…

基于SpringBoot的天氣預報系統的設計與實現

源碼鏈接&#xff1a;點擊下載源碼 相關文檔&#xff1a;點擊下載相關文檔 摘 要 隨著科技的飛速發展和人們生活水平的不斷提高&#xff0c;天氣預報已成為現代社會不可或缺的一部分。無論是日常生活出行、農業生產安排&#xff0c;還是航空、海運等交通領域&#xff0c;準確…

算法(keep learning)

基礎算法 背模板加刷題 排序快排 主要思想&#xff1a;分治 第一步&#xff1a;確認一個分界點&#xff0c;比如起點&#xff0c;中間點&#xff08;分界點&#xff09;&#xff0c;末點第二步&#xff1a;調整區間&#xff0c;使得第一個區間的數都小于等于分界點&#xff0c;…

Django項目架構

背景&#xff1a;很多人寫 Django 時容易“什么都往 views 里塞”&#xff0c;結果項目一大就亂套了。需要把 視圖層 / 業務層 / 數據層 等職責清晰分出來。圖解說明Client&#xff1a;瀏覽器 / App / 前端調用 API。urls.py&#xff1a;定義 API 路由&#xff0c;把請求分發到…

MySQL】從零開始了解數據庫開發 --- 表的操作

永遠記住&#xff0c;你的存在是有意義的&#xff0c; 你很重要&#xff0c; 你是被愛著的&#xff0c; 而且你為這個世界帶來了無可取代的東西。 -- 麥克西 《男孩、鼴鼠、狐貍和馬》-- 從零開始了解數據庫開發創建數據表查看表結構修改數據表結構重命名表復制表刪除表今天我們…

MySQL底層架構設計原理詳細介紹

文章目錄一、MySQL體系結構概覽二、連接層&#xff08;Connection Layer&#xff09;1. 連接器&#xff08;Connectors&#xff09;2. 連接池&#xff08;Conncction Pool&#xff09;三、服務層&#xff08;Server Layer&#xff09;1. SQL接口組件&#xff08;SQL Interface&…

QB/T 4674-2021 汽車內裝飾用聚氨酯束狀超細纖維合成革檢測

汽車內飾品聚氨酯束狀超細纖維合成革是指以海島型雙組份或多組分纖維加工成飛織造布&#xff0c;再經水性聚氨酯樹脂或溶劑型聚氨酯樹脂浸漬、濕法凝固、溶劑或堿液萃取及后整理等工藝制成的汽車內裝飾皮革。QB/T 4674-2021 汽車內裝飾用聚氨酯束狀超細纖維合成革檢測項目測試項…

QML和Qt Quick

QML和Qt Quick QML 和 Qt Quick 是 Qt 框架中緊密相關但概念不同的兩個部分&#xff0c;它們之間的關系可以用如下方式清晰說明&#xff1a; 核心區別概覽??特性????QML????Qt Quick????本質??聲明式編程??語言??基于 QML 的??框架/庫????作用??定…

JavaScript 結構型設計模式詳解

1. 代理模式1.1. 使用場景代理模式在不改變原始對象的前提下&#xff0c;通過代理對象控制對其訪問&#xff0c;通常用于權限控制、延遲加載、遠程調用等場景。在前端開發中&#xff0c;可以通過代理模式對網絡請求、緩存機制等進行控制。1.2. 代碼實現class ApiService {reque…

攝像頭模塊在運動相機中的特殊應用

運動相機作為記錄高速運動場景的專用設備&#xff0c;其攝像頭模塊的設計與普通消費電子產品存在顯著差異。根據行業資料和技術發展&#xff0c;攝像頭模塊在運動相機中的特殊應用主要體現在以下五個維度&#xff1a;一、極端環境適應性設計運動相機的攝像頭模塊針對戶外運動場…

SpringBoot + MinIO/S3 文件服務實現:FileService 接口與 FileServiceImpl 詳解

在企業項目中&#xff0c;文件上傳和管理是非常常見的需求。本文基于 芋道源碼 的實現&#xff0c;介紹如何封裝一個通用的 文件服務 FileService&#xff0c;支持&#xff1a;文件上傳&#xff08;保存數據庫記錄 存儲文件到 S3/MinIO 等對象存儲&#xff09;文件下載與刪除文…