您的位置:首页 > 其它

LeetCode-53. Maximum Subarray

2017-12-08 17:18 471 查看

Description:



Solution1 (C++):



Solution2 (C++):



算法分析:

这个题目要求的是连续序列的最大和。解法的思想非常有意思。其实我们就不断的累加nums[i],但是要注意我们不需要找到最长的子序列,只需要找到最大的和,所以首先最要紧的一个问题就是,一个集合,其子集自然有很多。但是题目解法计算了集合的和的集合不超过nums.siuze();那为什么能保证这最多nums.size()个集合的和就比剩下的(2的n次方-1-nums.size())个集合的和都大呢?

我是这样想的:

对于集合中任意一个元素,在它面前的有两条路,一条是加入之前的连续子集,另一条是独立成新的子集。那么对于这两个集合,若要判断哪个集合的和大,自然要看前一个子集的和是否大于0.如果大于0,那么第一条路产生的新子集的和大;否则,第二条路产生的新子集的和大。那么通过这种方法判断就可以过滤掉计算很多不了要的子集的和。

那么在求和过程中,不断将sum与最大值ans比较,获得最终的最大值ans就是问题的解。

后面更新,其实可以参考解法二,代码写得更直观明白。其实解法一中:sum=max(sum,o);就相当于解法二中的:curMax = curMax>0? (curMax + x):x ;

程序分析:

程序编写比较简单,略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: