题目:
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
样例:
给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6
思路:
采用动态规划的思想:维持两个变量,一个是目前最大和sum,一个是全局最大和sum_max.递推式是sum=max(sum+nums[i],nums[i])。
参考答案:
//时间复杂度O(n)
using namespace std;
class Solution {
public:
/*
* @param nums: A list of integers
* @return: A integer indicate the sum of max subarray
*/
int maxSubArray(vector<int> &nums) {
// write your code here
if(nums.size() == 0)
return 0;
int sum = nums[0];
int sum_max = nums[0];
int i;
for(i=1; i<nums.size(); i++)
{
sum = max(nums[i], sum+nums[i]);
if(sum > sum_max)
{
sum_max = sum;
}
}
return sum_max;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。