leetcode hot100 多維動態規劃

1??2?? 多維動態規劃(區間 DP、狀態機 DP)

62. 不同路徑

一個機器人位于一個 m x n 網格的左上角 (起始點在下圖中標記為 “Start” )。機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為 “Finish” )。問總共有多少條不同的路徑?

題解:數組, 動態規劃

  • 由一維轉為二維了, 其實規劃式子還是和前面的狀態有關. 比如dp[i][j]表示到達(i,j)的所有路徑, 又(i,j)只會從(i-1,j)&(i,j-1)移動而來, 那么, dp[i][j]=dp[i-1][j]+dp[i][j-1]

  • class Solution {public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for(int i=0;i<m;i++){dp[i][0]=1;}for(int j=0;j<n;j++){dp[0][j]=1;}for(int i=1;i<m;i++){for(int j=1;j<n;j++){dp[i][j] = dp[i-1][j]+dp[i][j-1];}}return dp[m-1][n-1];}
    }
    

64. 最小路徑和

給定一個包含非負整數的 *m* x *n* 網格 grid ,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明:每次只能向下或者向右移動一步。

題解:數組, 動態規劃

  • 跟前面那題一樣, 其實走一遍圖就知道了. dp[i][j]代表點(i,j)最小路徑和, 那么第0排和第0列的數據是遍歷一遍可以計算出來的: 當前grid值+前一位置的dp值

  • 那么其余位置可以計算了, dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j]

  • class Solution {public int minPathSum(int[][] grid) {int m = grid.length;int n = grid[0].length;int[][] dp = new int[m][n];dp[0][0] = grid[0][0];for(int i=1;i<m;i++){dp[i][0] = dp[i-1][0]+grid[i][0];}for(int j=1;j<n;j++){dp[0][j] = dp[0][j-1]+grid[0][j];}for(int i=1;i<m;i++){for(int j=1;j<n;j++){dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];}}return dp[m-1][n-1];}
    }
    
5. 最長回文子串

給你一個字符串 s,找到 s 中最長的 回文 子串。

題解:子串, 遞歸, 動態規劃

  • 如果一個字符串為回文串, 那么左右各縮減1的子串也為回文串

  • dp[][]存儲的是(i,j)處的串是否為回文串, 如果是, 那么s[i] == s[j] &&dp[i+1][j-1]同時也是回文串

  • 怎么根據上面的式子找出動態規劃呢, 我們最后肯定要維護一個最長回文子串大小以及begin處, 這樣返回的才是s.substring(begin,begin+mL)

  • dp[i][i]肯定是回文的, 因為只有一個字符, 初始化以下; 計算是否回文, 或許可以用雙指針, 一個指向頭, 一個指向假定len的尾, 那么這個len要從多大開始呢–第二條可以得出: dp[i][j] = s[i]==s[j] && dp[i+1][j-1]

  • 我們需要先得出內部子串是否為回文, 那么len要從最小判斷: for(int len = 2;i<=s.length();l++), 然后遍歷s,從s的索引i處到i+len-1處, 看當前子串是否為回文的即可

  • class Solution {public String longestPalindrome(String s) {int n = s.length();if(n < 2) return s;int mL=1;int begin = 0;boolean[][] dp = new boolean[n][n];char[] chs = s.toCharArray();for(int l = 2;l<=n;l++){for(int i=0;i<n;i++){int j = i+l-1;if(j >= n) break;if(chs[i] != chs[j]){dp[i][j] = false;}else{if(j-i < 3) dp[i][j] = true;else{dp[i][j] = dp[i+1][j-1];}}if(j-i+1 > mL&dp[i][j]){mL = j-i+1;begin = i;}}}return s.substring(begin,begin+mL);}
    }
    
1143. 最長公共子序列

給定兩個字符串 text1 和 text2,返回這兩個字符串的最長 公共子序列 的長度。如果不存在 公共子序列 ,返回 0 。一個字符串的 子序列 是指這樣一個新的字符串:它是由原字符串在不改變字符的相對順序的情況下刪除某些字符(也可以不刪除任何字符)后組成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。兩個字符串的 公共子序列 是這兩個字符串所共同擁有的子序列。

題解:子串, 動態規劃

  • 其實這題我建議記下來, 因為很久不用這題的邏輯總會忘記, 但是代碼又是很簡單的

  • class Solution {public int longestCommonSubsequence(String text1, String text2) {int m = text1.length();int n = text2.length();int[][] dp = new int[m+1][n+1];char[] chs1 = text1.toCharArray();char[] chs2 = text2.toCharArray();for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(chs1[i-1] == chs2[j-1]){dp[i][j] = dp[i-1][j-1]+1;}else{dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);}}}return dp[m][n];}
    }
    

72. 編輯距離

給你兩個單詞 word1 和 word2, 請返回將 word1 轉換成 word2 所使用的最少操作數 。你可以對一個單詞進行如下三種操作:插入一個字符; 刪除一個字符; 替換一個字符

題解:最長公共子序列, 動態規劃

  • 本題需要維護的是dp[i][j] , 表示A的前i個字母與B的前j個字母之間的編輯距離

  • class Solution {public int minDistance(String word1, String word2) {int n = word1.length();int m = word2.length();if(n*m == 0) return n+m;int[][] dp = new int[n+1][m+1];for(int i=0;i<=n;i++){dp[i][0]=i;}for(int j=0;j<=m;j++){dp[0][j] = j;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int left = dp[i-1][j]+1;int down = dp[i][j-1]+1;int left_down = dp[i-1][j-1];if(word1.charAt(i-1)!= word2.charAt(j-1)){left_down+=1;}dp[i][j] = Math.min(left,Math.min(down,left_down));}}return dp[n][m];}
    }
    

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

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

相關文章

3.27學習總結 爬蟲+二維數組+Object類常用方法

高精度&#xff1a; 一個很大的整數&#xff0c;以字符串的形式進行接收&#xff0c;并將每一位數存儲在數組內&#xff0c;例如100&#xff0c;即存儲為[1][0][0]。 p2437蜜蜂路線 每一個的路線數前兩個數的路線數相加。 #include <stdio.h> int a[1005][1005]; int …

車載以太網網絡測試-26【SOME/IP-通信方式-2】

目錄 1 摘要2 Method &#xff08;FF/RR&#xff09;、Event、Filed介紹2.1. SOME/IP Method 接口2.1.1 **Fire & Forget (FF)** - 單向調用2.1.2 **Request/Response (RR)** - 請求/響應模式2.1.3 **車載ECU通信實現示例**:2.1.4 **通信序列示例**2.1.5 實現注意事項 2.2 …

把doi直接插入word中,然后直接生成參考文獻

這段代碼通過提取、查詢、替換DOI&#xff0c;生成參考文獻列表來處理Word文檔&#xff0c;可按功能模塊劃分&#xff1a; 導入模塊 import re from docx import Document from docx.oxml.ns import qn from habanero import Crossref導入正則表達式模塊re用于文本模式匹配&a…

[C++] : C++11 右值引用的理解

&#xff08;一&#xff09;什么是左值和右值&#xff1f; 傳統的C語法中就有引用的語法&#xff0c;而C11中新增了的右值引用語法特性&#xff0c;所以從現在開始我們 之前學習的引用就叫做左值引用。無論左值引用還是右值引用&#xff0c;都是給對象取別名。 1.左值 左值是一…

windows服務器切換到linux服務器踩坑點

單節點環境依賴性 單節點問題&#xff0c;影響業務可用性&#xff0c;windows影響后續自動化&#xff0c;健壯性的提升&#xff0c;需要進行linux化 每個服務至少是雙節點&#xff0c;防止單點故障&#xff0c;提升系統的可用性&#xff0c;健壯性。linux化后可以進行docker化…

美顏SDK兼容性挑戰:如何讓美顏濾鏡API適配iOS與安卓?

如何讓美顏濾鏡API同時適配iOS與Android&#xff0c;并確保性能流暢、效果一致&#xff0c;是開發者面臨的一大挑戰。今天&#xff0c;我將與大家一同深度剖析美顏SDK的跨平臺兼容性問題&#xff0c;并分享優化適配方案。 一、美顏SDK兼容性面臨的挑戰 1.1不同平臺的圖像處理框…

Vue3 表單

Vue3 表單 隨著前端技術的發展,Vue.js 作為一款流行的前端框架,不斷更新迭代,以適應更高效、更便捷的開發需求。Vue3 作為 Vue.js 的第三個主要版本,引入了許多新特性和改進,其中包括對表單處理機制的優化。本文將深入探討 Vue3 表單的使用方法、技巧以及注意事項。 1. …

筆記:代碼隨想錄算法訓練營day62:108.冗余連接、109.冗余連接II

學習資料&#xff1a;代碼隨想錄 108. 冗余連接 卡碼網題目鏈接&#xff08;ACM模式&#xff09; 判斷是否有環的依據為&#xff0c;利用并查集&#xff0c;isSame函數&#xff0c;判斷當下這條邊的兩個節點入集前是否為同根&#xff0c;如果是的話&#xff0c;該邊就是會構…

RK3588,V4l2 讀取Gmsl相機, Rga yuv422轉換rgb (mmap)

RK3588, 使用V4l2 讀取 gmsl 相機,獲得yuv422格式圖像, 使用 rga 轉換 rgb 圖像。減少cpu占用率. 內存管理方式采用 mmap… 查看相機信息 v4l2-ctl --all -d /dev/cam0 , 查看自己相機分辨率,輸出格式等信息,對應修改后續代碼測試… Driver Info:Driver name : rkcif…

Kubernetes》k8s》Containerd 、ctr 、cri、crictl

containerd ctr crictl ctr 是 containerd 的一個客戶端工具。 crictl 是 CRI 兼容的容器運行時命令行接口&#xff0c;可以使用它來檢查和調試 k8s 節點上的容器運行時和應用程序。 ctr -v 輸出的是 containerd 的版本&#xff0c; crictl -v 輸出的是當前 k8s 的版本&#x…

Vue 入門到實戰 十一 Vuex

目錄 11.1狀態管理與應用場景 1&#xff09;state 2&#xff09;Getters 3&#xff09;Mutations 4&#xff09;Actions 5&#xff09;Module 11.2Vuex的安裝與基本應用 11.3Vuex的核心概念 一句話解釋vuex&#xff1a;就是單獨成立一個組件&#xff0c;這個組件存儲共…

【YOLOv11】目標檢測任務-實操過程

目錄 一、torch環境安裝1.1 創建虛擬環境1.2 啟動虛擬環境1.3 安裝pytorch1.4 驗證cuda是否可用 二、yolo模型推理2.1 下載yolo模型2.2 創建模型推理文件2.3 推理結果保存路徑 三、labelimg數據標注3.1 安裝labelimg3.2 解決浮點數報錯3.3 labelimg UI界面介紹3.4 數據標注案例…

探索 Vue 中的多語言切換:<lang-radio /> 組件詳解!!!

探索 Vue 中的多語言切換&#xff1a;<lang-radio /> 組件詳解 &#x1f30d; 嗨&#xff0c;大家好&#xff01;&#x1f44b; 今天我們來聊聊如何在 Vue 項目中實現一個優雅的多語言切換功能——<lang-radio /> 組件。這是一個小而美的組件&#xff0c;出現在登…

grafana 配置頁面告警

添加告警規則 1.登錄grafana 點擊 Alerting > Alert rules 點擊 New alert rule 2.填寫告警規則名字 3.配置告警規則 選擇數據源為 Loki 單機 Builder 單機Label brower 單機 node_name 標簽&#xff0c;選擇一個主機&#xff0c;選好后單機 Show logs 這時候查詢語…

關于JVM和OS中的棧幀的區別和內存淺析

關于JVM和OS中的棧幀的區別和內存淺析 剛看了黑馬JVM中的棧幀的講解&#xff0c;感覺和自己理解的棧幀有一定出入&#xff0c;查詢資料研究了一下發現的確有天壤之別&#xff0c;可惜黑馬并沒有講。 故寫下這篇文章鞏固一下, OS的棧幀&#xff1a; ? OS的棧幀會在調用一個函…

Python FastApi(7):請求體

1 多個參數 1.1 混合使用 Path、Query 和請求體參數 首先&#xff0c;毫無疑問地&#xff0c;你可以隨意地混合使用 Path、Query 和請求體參數聲明&#xff0c;FastAPI 會知道該如何處理。你還可以通過將默認值設置為 None 來將請求體參數聲明為可選參數&#xff1a; from ty…

告別枯燥工作,走向自動化

嘿&#xff0c;小伙伴們&#xff01;今天給你們介紹兩款超實用的RPA辦公自動化軟件&#xff0c;用它們&#xff0c;再也不用像機器一樣做重復勞動啦&#xff0c;超省時間&#xff01; 工具名稱&#xff1a;影刀RPA&#xff08;類似產品&#xff0c;八爪魚 RPA&#xff0c;操作上…

一種C# Winform的UI處理

效果 圓角 陰影 突出按鈕 說明 這是一種另類的處理&#xff0c;不是多層窗口 也不是WPF 。這種方式的特點是比較簡單&#xff0c;例如圓角、陰影、按鈕等特別容易修改過。其實就是html css DirectXForm。 在VS中如下 圓角和陰影 然后編輯這個窗體的Html模板&#xff0c…

HarmonyOS-ArkUI Navigation (導航組件)-第一部分

導航組件主要實現頁面間以及組件內部的界面跳轉&#xff0c;支持在不同的組件間進行參數的傳遞&#xff0c;提供靈活的跳轉棧操作&#xff0c;從而便捷的實現對不同頁面的訪問和復用。 我們之前學習過Tabs組件&#xff0c;這個組件里面也有支持跳轉的方式&#xff0c;Navigati…

華為開源自研AI框架昇思MindSpore應用案例:基于MindSpore框架實現PWCNet光流估計

如果你對MindSpore感興趣&#xff0c;可以關注昇思MindSpore社區 1 環境準備 1.進入ModelArts官網 云平臺幫助用戶快速創建和部署模型&#xff0c;管理全周期AI工作流&#xff0c;選擇下面的云平臺以開始使用昇思MindSpore&#xff0c;可以在昇思教程中進入ModelArts官網 創建…