题解 | #连续子数组的最大和#(动态规划)

连续子数组的最大和

http://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484

算法思路(动态规划)

  • 设dp[n]为以第n个数为结尾,得到的子数组的和的最大值,因为以第n个数为结尾所以array[n]是必然被选择的。
  • 基于dp[n-1]的值,如果dp[n-1]>0,我们加上这个正数,我们的值是不是必然会增大;如果dp[n-1]<0,那么我们加上负数,我们的值就会减小,这个时候我们不如不要前面的结果,只要当前这个数,结果反而更优。
  • 于是我们就得到了状态转移方程dp[n]=array[n]+(dp[n-1]>0?dp[n-1]:0),实时跟ans比较,更新最大值即可。

代码实现

当然对这一道题来说,我们不用定义一个dp数组,而只定义一个now变量来代替dp数组,如果now<0,那么就令now=array[i]。如果now>0,那么就令now+=array[i]。

//典型的动态规划题
class Solution
{
public:
  int FindGreatestSumOfSubArray(vector<int> array)
  {		
  		//now代表各个状态,ans保留最大的那个状态。
	    int now, ans;
	    now = 0, ans = INT_MIN;
	    for (int i = 0; i < array.size(); i++)
	    {
	        if (now < 0)//now<0,则舍去前面的
	            now = array[i];
	        else
	        {
	            now += array[i];//比0大则直接加上去
	        }
	        ans = max(now, ans);//更新ans
	    }
	    return ans;
  }
};
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
4609次浏览 48人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16917次浏览 137人参与
# 米连集团26产品管培生项目 #
7418次浏览 228人参与
# 沪漂/北漂你觉得哪个更苦? #
1646次浏览 41人参与
# 你的实习产出是真实的还是包装的? #
3261次浏览 54人参与
# 春招至今,你的战绩如何? #
16231次浏览 147人参与
# MiniMax求职进展汇总 #
25292次浏览 322人参与
# HR最不可信的一句话是__ #
1118次浏览 33人参与
# AI面会问哪些问题? #
976次浏览 24人参与
# 你做过最难的笔试是哪家公司 #
1319次浏览 23人参与
# AI时代,哪个岗位还有“活路” #
2956次浏览 53人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152954次浏览 889人参与
# 简历第一个项目做什么 #
32195次浏览 363人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8032次浏览 43人参与
# XX请雇我工作 #
51165次浏览 171人参与
# 简历中的项目经历要怎么写? #
311149次浏览 4272人参与
# 投格力的你,拿到offer了吗? #
178395次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
77017次浏览 375人参与
# AI时代,哪些岗位最容易被淘汰 #
64881次浏览 895人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187643次浏览 1123人参与
# 你怎么看待AI面试 #
180898次浏览 1320人参与
# 正在春招的你,也参与了去年秋招吗? #
364423次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务