您的位置:首页 > 职场人生

面试题 31

2015-09-18 13:56 253 查看

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: