2021 2 3 演算法練習

2022-06-06 23:42:13 字數 1730 閱讀 7483

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,如此類推。如果還沒明白看樣例可以更加明確此人的意圖.這個人不想一口氣把這些糖全吃掉,他用記事...