思路:
这题目应该是最基础的动态规划的题目:最大子数组的和一定是由当前元素和之前最大连续子数组的和叠加在一起形成的,因此需要遍历n个元素,看看当前元素和其之前的最大连续子数组的和能够创造新的最大值。
我们只要找出前面的一个元素的最大连续子数组值即可,而前面一个元素和他前面的元素如果形成的最大数组是负的,我们还不如用自己一人一个队伍呢,如果前面形成的数组是正的我们可以加入队伍。
代码:
public int FindGreatestSumOfSubArray(int[] array) {
int max=array[0];
for (int i = 1; i < array.length; i++) {
array[i]+=Math.max(array[i-1],0);
max=Math.max(array[i],max);
}
return max;
}
另外直接改变入参可能有点奇怪,如果是生产环境,我们可以copy一个数组,然后对copy数组做修改判断。