62. 不同路徑
使用動態規劃
首先確定dp陣列的含義:dp(i, j) : 從(0,0)出發,到(i,j)有dp(i, j)條不同的路徑
根據題意,要到達(i,j)這個點只能從(i - 1, j) 和(i, j - 1)過來,因此可以確定狀態轉移方程
\[dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
\]接下來進行dp陣列的初始化,對於dp(i, j)而言,當i=0和j=0時,必定只有一條路徑,所以可以先對這部分初始化為1
遍歷順序取決於狀態轉移方程,根據方程可知,可以從上到下,從左到右進行遍歷。
**:
class solution
}return dp[m - 1][n - 1] ;}};
63. 不同路徑 ii
使用動態規劃,是62. 不同路徑的高階版本
首先確定dp陣列的下標及其含義,dp(i, j) :在有障礙的情況下,從(0, 0)到(i, j)有dp(i, j)條不同的路徑,如果(i, j)上有障礙,那麼沒有路徑可以到達這裡,所以dp(i, j)為0
確定狀態轉移方程
\[dp[i][j] = dp[i-1][j] + dp[i][j-1]\ \ \ \ obstaclegrid[i][j] ==0
\]\[dp[i][j]=0\ \ \ \ obstaclegrid[i][j]=1
\]進行初始化,一樣對於i=0和j=0的兩條路徑進行初始化,需要注意如果路徑上出現了障礙,那麼障礙之後的位置就無法再到達
確定遍歷順序,一樣從上到下,從左到右進行遍歷,只不過需要注意當位置上有障礙時需要跳過
**:
class solution
for (int i = 0;i < m && obstaclegrid[0][i] != 1;i++)
for (int i = 1;i < n;i++)
}return dp[n - 1][m - 1] ;}};
96. 不同的二叉搜尋樹
這題挺難的......
首先當n等於1時,可以組成的二叉搜尋樹是
當n等於2時,可以組成的二叉搜尋樹是
當n等於3時,可以組成的二叉搜尋樹如題意所說
從觀察n等於3時組成的二叉搜尋樹入手,可以發現所有的二叉搜尋樹的根節點都是由1~3組成的,同時,其左右子樹的形式都和n=1、n=2、n=0時組成的二叉搜尋樹相同
因此我們可以使用動態規劃來統計數目
設定的dp陣列,dp(i)表示i個不重複的節點,可以組成多少個二叉搜尋樹
通過對n=3時組成的二叉搜尋樹觀察可以發現狀態轉移方程
\[dp[i] =\sum_^(dp[j-1]*dp[i-j])
\]初始化,只需要初始化dp[0],0個節點是乙個空二叉樹,所以dp[0] = 1
確定遍歷順序,從1到n逐個遍歷即可
class solution
}return dp[n];}};
演算法練習1
自己不怎麼關注演算法,但是面試的時候常有一些公司就會給演算法題目,目的也很直接,自己每日一練就好。思路 使用純 c來實現。條件1,陣列b內所有數字加起來為10 動態調整陣列b內的數值。因為時間先後的原因,會導致先前統計個數出現的次數不正確。include include static int a 1...
python knn演算法練習
1,準備資料 從檔案中讀出檔案 資料來自海倫約會 例子 展示如圖 2 資料歸一化 主要公式 newvalue oldvalue min max min tmpmat,rangs,mins knn.autonorm mat tmpmat array 0.44832535,0.39805139,0.56...
演算法練習 吃糖
時間限制 2 s 記憶體限制 128 mb 題目描述 某人買了n兜糖果,第i兜有ai塊糖。此人把所有這些糖果用乙個數字標記起來 他這樣標記這些糖,第一袋糖用用數字1到a1,第二袋糖用數字a1 1到a1 a2,如此類推。如果還沒明白看樣例可以更加明確此人的意圖.這個人不想一口氣把這些糖全吃掉,他用記事...