刷題89 動態規劃(六)

2022-07-28 03:42:12 字數 1218 閱讀 8388

輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。

要求時間複雜度為o(n)。

示例1:

輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]

輸出: 6

解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

設定陣列dp[i]為以nums[i]結尾的元素的最大和,dp[0] = nums[0];

設定res為此陣列的最大和,初始值為:nums[0];

令dp[i] = nums[i],判斷dp[i-1]是否大於0 ,若是大於0 ,dp[i] = dp[i] + dp[i-1];

res = math.max(res,dp[i]),返回res。

/**

* @param nums

* @return

*/var maxsubarray = function(nums)

return res;

};

在乙個 m*n 的棋盤的每一格都放有乙個禮物,每個禮物都有一定的價值(價值大於 0)。你可以從棋盤的左上角開始拿格仔裡的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定乙個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?

示例 1:

輸入:

[[1,3,1],

[1,5,1],

[4,2,1]

]輸出: 12

解釋: 路徑 1→3→5→2→1 可以拿到最多價值的禮物

0 < grid.length <= 200

0 < grid[0].length <= 200

拿禮物的方式是每次向左或者向下移動一格,設定grid[i][j]為當前路徑最大和;

判斷i-1是否大於0,j-1是否大於0,都大於的話,那麼上乙個路徑為math.max(grid[i-1][j],grid[i][j-1]);

若是i-1大於0,那麼上乙個路徑為grid[i-1][j];

若是j-1大於0,那麼上乙個路徑為grid[i][j-1];

/**

* @param grid

* @return

*/var maxvalue = function(grid) else if(i-1 >= 0)else if(j-1 >= 0)}}

return grid[n-1][m-1];

};

刷題89 動態規劃(六)

題目鏈結題目描述 輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間複雜度為o n 示例1 輸入 nums 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。題目分析 設定陣列dp i ...

刷題 動態規劃

動態規劃法 動態規劃求解問題的四個特徵 求乙個問題的最優解 整體的問題的最優解是依賴於各個子問題的最優解 小問題之間還有相互重疊的更小的子問題 從上往下分析問題,從下往上求解問題 題目 給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k ...

動態規劃刷題總結

資料結構與演算法 41 動態規劃理論 最優子結構 無後效性和重複子問題 zj csdn部落格 乙個模型 多階段決策最優解模型,重點在於多階段,每個階段都對應著不同的狀態 三個特徵 最優子結構,無後效性,重複子問題。主要抓住最優子結構這一特徵,理解為後面的階段狀態可以由前面的階段狀態推導而來。狀態定義...