头脑风暴:最大子序和
题目
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
解题思路
根据题意,本题可使用动态规划的方式来求解。
第一步,确定 dp 数组以及下标的含义:
dp[i]:包括下标 i 之前的最大连续子序列和为 dp[i]。
第二步,确定递推公式:
dp[i] 当且仅有两个方向可以推断:
dp[i - 1] + nums[i],即:nums[i]加入当前连续子序列和
nums[i],即:从头开始计算当前连续子序列和
第三步,dp 初始化:
根据 dp[i]的定义, dp[0] = nums[0]。
第四步,确定遍历顺序:
递推公式中 dp[i]依赖于 dp[i - 1]的状态,需要从前向后遍历。
代码实现
复制代码
最后
时间复杂度:O(n)
空间复杂度:O(n)
版权声明: 本文为 InfoQ 作者【HelloWorld杰少】的原创文章。
原文链接:【http://xie.infoq.cn/article/015f055104d9c158a366ea885】。文章转载请联系作者。
评论