1 题目描述
输入一个整数数组,数组里有证正数也有负数,数组中一个或连续的多个整数组成一个子数组,求所有数组的和的最大值。要求时间复杂度为O(n)
2 算法描述
{1,-2,3,10,-4,7,2,-5} => {3,10,-4,7,2}
1+(-2)=(-1)
如果后面的元素加上 -1 的话,只会让总和减小,所以当总和小于等于零的时候,我们需要抛弃之前所求得的和,从下一个元开始重新计算
3+10-4=9,之前总和为 13 当我们加上 -4 之后总和减小 ,我们需要一个辅助变量来存储之前的最大总和。
3 实现代码 java
public class FindGreatestSumOfSubArray {
public static void main(String[] args) {
int[] arrays=new int[]{-1,-3,6,-5,-5};
int result=findGreatestSumOfSubArray(arrays);
System.out.println(result);
System.out.print(Integer.toBinaryString(-2147483648));
}
private static int findGreatestSumOfSubArray(int[] arrays) {
int sum=0;
int max=0x80000000;
for(int i=0;i<arrays.length;i++){
if(sum<=0){
sum=arrays[i];
}else{
sum=sum+arrays[i];
}
if(sum>max){
max=sum;
}
}
return max;
}
}