2020 7 14 力扣每日

2022-09-16 14:21:20 字數 1219 閱讀 5948

方法一:

1

class

solution 21}

22for(int j = 0; j < height; j++)

26return

res;27}

28 }

解題思路:本題使用動態規劃的方法,建立了dp陣列訪問每個點的最小路徑和,此處可以建立陣列dp[height][height],訪問對應點,**可讀性更強,但會有多餘的空間;也可建立陣列dp[height*(height+1)/2],沒有多餘空間,此處採用了第二種方法。遍歷每行的元素時,最小路徑和就為上一行對應的dp[index-i]與dp[inxe-i-1]中的較小值,加上當前位置元素的值。

注意點:

每行的第乙個與最後個元素的dp值需要特殊處理。

空間複雜度:o(n^2)n為三角形高度height

時間複雜度:o(n^2)

題後總結: 

優:熟練使用了動態規劃解決問題,對於特殊情況的考慮充分

差:空間複雜度仍可優化,**也可使用math.min進行簡化

方法二:

優化:考慮到每行的dp值實際上只和上一行的dp值相關,可以設定dp[height]儲存上一行最小值的情況,進行空間複雜度的優化。同時也可採取從最後行開始,反向計算dp值,這樣就無需再次遍歷dp陣列尋找最小值了。

注意點:

如果採用從上往下遍歷時,由於dp[j]的值與dp[j-1]和dp[j]有關,如果每行從左往右遍歷,那會造成dp[j-1]資料的變更,導致結果出錯,所以需要從右往左遍歷;

採用從下往上遍歷的順序時,則相反,dp[j]與dp[j],dp[j+1]有關,就需要從左往右遍歷

1

public

int minimumtotal(list>********) 12}

13return dp[0];

14 }

空間複雜度:o(n)n為三角形高度height

時間複雜度:o(n^2)

2020 8 4 力扣每日

儲存0入度元素 14for int i 0 i numcourses i 18while queue.isempty 26 27return count numcourses 判斷拓撲排序元素個數是否與課程數一致28 29 解題思路 根據題目中先修課程的描述,其與有向圖的構造類似,而判斷最終是否可以...

2020 7 23 力扣每日

解題思路 這是一道經典的動態規劃題目,由於移動方向為向右與向下,說明除了第一行第一列以外,其餘點的對應最小路徑和,只可能是從左移動至當前位置的路徑和,或是從上方移動至當前位置的路徑和。我們使用二維陣列dp row col 儲存所有點的對應路徑和情況。用up,left分別儲存從上,與從左的兩種情況,顯...

2020 7 21 力扣每日

解題思路 該題與先前的7.15日的每日一題相似,兩者都是不同的二叉搜尋樹,不同的是,先前只需返回總數,而該題需要返回所有的樹,但解題思路是相似的,要解決根節點的情況就要解決左右子樹的情況,這裡同樣可以使用動態規劃來實現,但此處先用遞迴來實現,便於理解。根據二叉搜尋樹的性質,顯然,i作為根節點時的左子...