您的位置:首页 > 其它

Maximum Subarray

2016-04-10 19:51 330 查看
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [−2,1,−3,4,−1,2,1,−5,4],

the contiguous subarray [4,−1,2,1] has the largest sum = 6.

当我们从头到尾遍历这个数组的时候,对于数组里的一个整数,它有几种选择呢?

它只有两种选择:

1、加入之前的SubArray;

2. 自己另起一个SubArray。那什么时候会出现这两种情况呢?

如果之前SubArray的总体和大于0的话,我们认为其对后续结果是有贡献的。这种情况下我们选择加入之前的SubArray

如果之前SubArray的总体和为0或者小于0的话,我们认为其对后续结果是没有贡献,甚至是有害的(小于0时)。这种情况下我们选择以这个数字开始,另起一个SubArray。

设状态为{f[j]},表示以{S[j]}结尾的最大连续子序列和,则状态转移方程如下:



class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len = nums.size();
if(len <= 0){
return 0;
}
int nLocalOpt = nums[0];
int nGlobalOpt = nLocalOpt;
for(int i=1; i<len; i++){
nLocalOpt = nLocalOpt + nums[i];
if(nLocalOpt <= nums[i]){
nLocalOpt = nums[i];
}
if(nGlobalOpt <= nLocalOpt){
nGlobalOpt = nLocalOpt;
}
}
return nGlobalOpt;
}
};


我的结果如下:



有优化代码求扫二维码进QQ群交流 ^_^ !
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: