摘要:代碼一個(gè)全局矩陣記錄每個(gè)點(diǎn)能開始的最長路徑對(duì)每個(gè)點(diǎn)開始深度優(yōu)先搜索看是否有必要更新全局最大長度如果已經(jīng)計(jì)算過,則直接返回遞歸上下左右
Longest Descending Path
記憶化搜索 復(fù)雜度給出一個(gè)矩陣,求矩陣中從某個(gè)點(diǎn)開始,最長的下降路徑。路徑可以走上下左右四個(gè)方向。求最長路徑的長度。
1 2 3 4 5 6 7 8其中一條最長路徑是8 7 6 5 1
時(shí)間 O(N) 空間 O(1)
思路最簡單的方法就是對(duì)每個(gè)點(diǎn)都向四個(gè)方向進(jìn)行深度優(yōu)先搜索,找到最長的下降路徑。然而我們可以用動(dòng)態(tài)規(guī)劃的方法,減少一些重復(fù)計(jì)算,如果我們已經(jīng)算出從點(diǎn)(i, j)開始的最長路徑,則不用再計(jì)算一遍,所以在深度優(yōu)先搜索中,要遞歸的記錄下路徑上這些點(diǎn)的長度:也就是以這些點(diǎn)為起點(diǎn),能達(dá)到的最長路徑長度。
代碼public class Ski { // 一個(gè)全局矩陣記錄每個(gè)點(diǎn)能開始的最長路徑 int[][] dp; public int getLongestPath(int[][] matrix){ dp = new int[matrix.length][matrix[0].length]; int max = 0; for(int i = 0; i < matrix.length; i++){ for(int j = 0; j < matrix[0].length; j++){ // 對(duì)每個(gè)點(diǎn)開始深度優(yōu)先搜索 dp[i][j] = dfs(i, j, matrix); // 看是否有必要更新全局最大長度 if(dp[i][j] > max){ max = dp[i][j]; } } } return max; } public int dfs(int i, int j, int[][] m){ // 如果已經(jīng)計(jì)算過,則直接返回 if(dp[i][j] != 0){ return dp[i][j]; } int length = 1; // 遞歸上下左右 if(i > 0 && m[i - 1][j] < m[i][j]){ length = Math.max(dfs(i - 1, j, m) + 1, length); } if(j > 0 && m[i][j - 1] < m[i][j]){ length = Math.max(dfs(i, j - 1, m) + 1, length); } if(i < m.length - 1 && m[i + 1][j] < m[i][j]){ length = Math.max(dfs(i + 1, j, m) + 1, length); } if(j < m[0].length - 1 && m[i][j + 1] < m[i][j]){ length = Math.max(dfs(i, j + 1, m) + 1, length); } dp[i][j] = length; return length; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64708.html
摘要:默認(rèn)值為返回值,一個(gè)對(duì)象,包含了原生用戶原生項(xiàng)目真實(shí)評(píng)分預(yù)測(cè)評(píng)分可能對(duì)后面預(yù)測(cè)有用的一些其他的詳細(xì)信息在給定的測(cè)試集上測(cè)試算法,即估計(jì)給定測(cè)試集中的所有評(píng)分。 這里的格式并沒有做過多的處理,可參考于OneNote筆記鏈接 由于OneNote取消了單頁分享,如果需要請(qǐng)留下郵箱,我會(huì)郵件發(fā)送pdf版本,后續(xù)再解決這個(gè)問題 推薦算法庫surprise安裝 pip install surp...
摘要:接下來判斷是否為空。因此接下來執(zhí)行。這個(gè)方法用于獲取字典中指定鍵名的鍵值第一個(gè)參數(shù),如果該鍵名不存在,則返回第二個(gè)參數(shù)設(shè)定的默認(rèn)值。當(dāng)我們填寫好表單,點(diǎn)擊發(fā)布按鈕,表單就以方式被提交到相對(duì)路徑,對(duì)應(yīng)的絕對(duì)路徑為。 前面的話 在Demo1里面,我們練習(xí)了如何部署應(yīng)用、tornado框架的基本結(jié)構(gòu)以及應(yīng)用如何處理請(qǐng)求。 其實(shí)Demo1算不上一個(gè)博客啦。一個(gè)最基本的信息系統(tǒng)一定要包含對(duì)數(shù)據(jù)...
摘要:接下來判斷是否為空。因此接下來執(zhí)行。這個(gè)方法用于獲取字典中指定鍵名的鍵值第一個(gè)參數(shù),如果該鍵名不存在,則返回第二個(gè)參數(shù)設(shè)定的默認(rèn)值。當(dāng)我們填寫好表單,點(diǎn)擊發(fā)布按鈕,表單就以方式被提交到相對(duì)路徑,對(duì)應(yīng)的絕對(duì)路徑為。 前面的話 在Demo1里面,我們練習(xí)了如何部署應(yīng)用、tornado框架的基本結(jié)構(gòu)以及應(yīng)用如何處理請(qǐng)求。 其實(shí)Demo1算不上一個(gè)博客啦。一個(gè)最基本的信息系統(tǒng)一定要包含對(duì)數(shù)據(jù)...
Problem Suppose we abstract our file system by a string in the following manner: The string dirntsubdir1ntsubdir2nttfile.ext represents: dir subdir1 subdir2 file.ext The directory dir ...
摘要:遞歸法復(fù)雜度時(shí)間空間思路因?yàn)橐易铋L的連續(xù)路徑,我們?cè)诒闅v樹的時(shí)候需要兩個(gè)信息,一是目前連起來的路徑有多長,二是目前路徑的上一個(gè)節(jié)點(diǎn)的值。代碼判斷當(dāng)前是否連續(xù)返回當(dāng)前長度,左子樹長度,和右子樹長度中較大的那個(gè) Binary Tree Longest Consecutive Sequence Given a binary tree, find the length of the lon...
閱讀 2016·2021-09-13 10:23
閱讀 2345·2021-09-02 09:47
閱讀 3805·2021-08-16 11:01
閱讀 1227·2021-07-25 21:37
閱讀 1608·2019-08-30 15:56
閱讀 543·2019-08-30 13:52
閱讀 3136·2019-08-26 10:17
閱讀 2453·2019-08-23 18:17