2020 7 23 力扣每日

2022-09-16 14:21:13 字數 1286 閱讀 7100

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

用up,left分別儲存從上,與從左的兩種情況,顯然動態方程為dp[i][j] = (up < left) ? up : left;

注意點:

空間複雜度:o(m*n),m,n為矩陣的行數與列數

時間複雜度:o(m*n)

優化:

我們發現,事實上每一行的元素的dp值,實際上只使用到了上一行的dp值與該行的前一位dp值,所以可以通過設定一維陣列dp[col],優化空間複雜度。

1

class

solution

12for (int i = 1; i < row; i++)19}

20return dp[col - 1];21}

22 }

解題思路:同樣,先設定第一行的dp值。在通過迴圈遍歷,對於每個節點來說,還未計算時,對應的dp[j]儲存的是上方節點的情況,而dp[j -1]則對應的是左方節點的情況,所以我們只需改變先前演算法,使left = dp[j -1] + grid[i][j], up = dp[j] + grid[i][j]。最後修改dp[j]為兩者中的最小值即可。

注意點:

同樣,第一行與第一列需特殊處理。

空間複雜度:o(n),n為矩陣的列數

時間複雜度:o(m*n)

題後總結:

優:對於經典的動態規劃熟練掌握,能迅速的解出,並進行一定的優化

差:**部分仍可精簡,如使用math.min

2020 8 4 力扣每日

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

2020 7 21 力扣每日

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

2020 7 17 力扣每日

解題思路 對於該題要求,顯然可以利用暴力法即順序查詢的方法查詢元素插入位置,但這顯然不是最優解法。此時很容易想到利用二分查詢法,由於該題陣列內可能不存在插入的元素,所以需要略微修改下二分查詢的演算法,搜尋到最後乙個小於目標的元素,插入到它的後面,或搜尋到第乙個大於等於目標的元素,插入到它的當前位置。...