分治法求子数组最大累加和。
从第二个位置元素开始,依次求**包含该位置元素在内**的最大子数组累计和(即该位置元素与前一位置元素之和,与该位置元素相比,哪个更大。若前者大于后者,则将该位置元素替换为该位置元素与前一位置元素之和),之后遍历数组,查询最大值即可。
class Solution {
public:
/**
* max sum of the subarray
* @param arr int整型vector the array
* @return int整型
*/
int maxsumofSubarray(vector<int>& arr) {
for (int i = 1; i < arr.size(); i++) {
//arr[i] = max(arr[i], arr[i - 1] + arr[i]);
if (arr[i] < arr[i - 1] + arr[i])
arr[i] = arr[i - 1] + arr[i];
}
int t = INT_MIN;
for (int i = 0; i < arr.size(); i++) {
//t = max(t, arr[i]);
if (arr[i] > t)
t = arr[i];
}
return t;
}
};