面试题 31

来源:互联网 发布:库里季后赛数据 编辑:程序博客网 时间:2024/06/05 14:22

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;    }}
0 0
原创粉丝点击