原题链接:力扣
int maxSubArray(vector<int>& nums) {
int maxValue = nums[0];
int sum = 0;
for (int i = 0; i < nums.size(); i++){
sum += nums[i];
maxValue = sum>maxValue ? sum : maxValue;
if (sum < 0){
sum = 0;
}
}
return maxValue;
}
也可以采用动态规划的方法
int maxSubArray(vector<int>& nums) {
if (nums.size() <= 1) return nums[0];
int maxValue = 0;
int *dp=new int[nums.size()];
dp[0] = nums[0];
dp[1] = max(nums[1], dp[0] + nums[1]);
maxValue = dp[0] > dp[1] ? dp[0] : dp[1];
for (int i = 2; i < nums.size(); i++)
{
dp[i] = max(nums[i], dp[i - 1] + nums[i]);
}
for (int i = 0; i < nums.size(); i++)
{
maxValue = maxValue >dp[i] ? maxValue : dp[i];
}
return maxValue;
}
两个循环可以合并。