题目
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).
实现
- 思路
1.最大子数组和初始化为array[0],子数组和初始化为0
2.计算子数组和
3.判断子数组和与最大子数组和关系,如果子数组和>=最大子数组和 更新最大子数组和
4.判断当前项与最大子数组和关系,如果子数组和<=array[i] 更新最大子数组和为 array[i] - 代码
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
//最大子数组和
int maxAdd = array[0];
//当前子数组和
int nowAdd = 0;
for (int i = 0; i < array.length; i++) {
nowAdd += array[i];
if(nowAdd >= maxAdd){
maxAdd = nowAdd;
}
if (maxAdd <= array[i]){
maxAdd = array[i];
nowAdd = array[i];
}
}
return maxAdd;
}
}
- 运行结果