LeetCode 53 最大子序和 動態規劃求解

2021-10-23 01:22:12 字數 1070 閱讀 4950

動態規劃:通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。

從題目給出例題輸入來找規律,我們需要乙個head來指向最優解序列的頭結點,head指向將不斷變化,定義乙個最優解陣列dp[i]記錄截至到當前元素的最優子序和.

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

輸出: 6

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

初始化dp[0] = -2

-2 : dp[0] = -2, head = 0

1 : dp[1] = 1 head = 1

-3 : dp[2] = -2 head = 1

通過前三項可以總結出規律:dp[i] = max(dp[i-1] + nums[i], nums[i]) 如果選中當前項,則更改head指向當前項

4 : dp[3] = max(dp[2] + 4, 4) = max(-2, 4) = 4 head = 3

-1: dp[4] = max(dp[3] ±1 , -1) = max(3, -1) = 3 head不變

2: dp[5] = max(5, 2) = 5, head 不變

1 : dp[6] = 6 head不變

-5 : dp[7] = 1 head不變

4 : dp[8] = 5 head不變

我們只需要其中最大的子序號,遍歷一遍dp陣列找出最大項dp[i],並且從 head 到 i 的序列就是最大子串行

即動態規劃解題方法:

分析最優解的結構特徵

建立最優值的遞迴式

自底向上計算最優值,並記錄

class

solution

int max = dp[0]

;//找最大和

LeetCode53最大子序和

給定乙個序列 至少含有 1 個數 從該序列中尋找乙個連續的子串行,使得子串行的和最大。例如,給定序列 2,1,3,4,1,2,1,5,4 連續子串行 4,1,2,1 的和最大,為6。擴充套件練習 若你已實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。一開始用的最簡單最直接的方法,挨個的把...

LeetCode 53 最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。這道題本來是能做出...

LeetCode 53 最大子序和

題目鏈結 題目描述 給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。解決方法 解題思路 動態規劃,複雜度為 o n 令dp i 表示最後一項為...