題目鏈結題目描述
輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。
要求時間複雜度為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 為以nums i 結尾的元素...
刷題 動態規劃
動態規劃法 動態規劃求解問題的四個特徵 求乙個問題的最優解 整體的問題的最優解是依賴於各個子問題的最優解 小問題之間還有相互重疊的更小的子問題 從上往下分析問題,從下往上求解問題 題目 給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k ...
動態規劃刷題總結
資料結構與演算法 41 動態規劃理論 最優子結構 無後效性和重複子問題 zj csdn部落格 乙個模型 多階段決策最優解模型,重點在於多階段,每個階段都對應著不同的狀態 三個特徵 最優子結構,無後效性,重複子問題。主要抓住最優子結構這一特徵,理解為後面的階段狀態可以由前面的階段狀態推導而來。狀態定義...