1 动态规划问题
从数组a=[1, 2, -1, 4, -5, 7]中找出连续子数组之和最大的子数组,返回他们的和 —— 找最优解问题,动态规划
子问题1:包含单个数组值子数组和最大等于?
子问题2: 以单个数组值结尾的子数组和最大等于?
目标:找出状态转移方程、初始状态
子问题2的状态公式
d p [ i ] = { d p [ i − 1 ] , a [ i ] < 0 d p [ i − 1 ] + a [ i ] , a [ i ] ≥ 0 dp[i]=\left\{ \begin{aligned} dp[i-1], a[i]<0 \\ dp[i-1]+a[i],a[i] \ge 0 \end{aligned} \right. dp[i]={dp[i−1],a[i]<0dp[i−1]+a[i],a[i]≥0
状态转移公式2
m a x = M a t h . m a x ( d p [ i ] , d p [ i − 1 ] ) max = Math.max(dp[i],dp[i-1]) max=Math.max(dp[i],dp[i−1])
实现
/**
* @param {number[]} nums
* @return {number}
*/
//如果值大于0,
var maxSubArray = function(nums) {
let dpResult = 0,maxContent = nums[0], len = nums.length;
for(let i = 0; i < len;i++) {
dpResult = Math.max(dpResult + nums[i], nums[i]);
maxContent = Math.max(maxContent, dpResult)
}
return maxContent
};