剑指offer系列(30)连续子数组的最大和
解题思路:动态规划。
注意到题目有两个要求:1. 连续子数组 2. 和最大。
通过遍历数组,使用变量sum记录累加元素和,变量 ans
记录全局最大子序和。当sum小于0时,则以该数结束,计算下一个子数组的和,每次累加一个数,判断是否比ans
大,更新 ans
。代码如下
class Solution{
public:
int FindGreatestSumOfSubArray(vector<int> array){
if (array.size() == 0) return 0;
int ans = INT_MIN;
int sum = 0;
for (int i = 0; i < array.size(); i++){
if (sum < 0){
sum = array[i];
}
else{
sum += array[i];
}
ans = max(ans, sum);
}
return ans;
}
};
执行结果