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
.
题意要求从给出数组中找出一个子数组,使其和最大。最简单的方法就是多次遍历数组,每次标注最大值并剔除,但是这个方法时间复杂度很高,提交也是无法通过的。这里就可以用动态规划的方法来解这个题目,实际上用到的是一个名叫Kadane算法,参考博客:
http://blog.youkuaiyun.com/joylnwang/article/details/6859677
在这里给出一个更简单的代码:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if (nums.size() == 0)
return 0;
int end = nums[0];
int MAX = nums[0];
int i;
for (i = 1; i < nums.size(); i++) {
if (end < 0)
end = nums[i];
else
end += nums[i];
MAX = max(MAX, end);
}
return MAX;
}
};