面试题31:连续数组的最大和

来源:互联网 发布:iherb靠谱吗 知乎 编辑:程序博客网 时间:2024/05/16 17:00

解法一:

/*算法时间复杂度O(n)用total记录累计值,maxSum记录和最大基于思想:对于一个数A,若是A的左边累计数非负,那么加上A能使得值不小于A,认为累计值对          整体和是有贡献的。如果前几项累计值负数,则认为有害于总和,total记录当前值。此时 若和大于maxSum 则用maxSum记录下来*/public class Solution {    public int FindGreatestSumOfSubArray(int[] array) {        if(array.length==0)            return 0;        else{            int total=array[0],maxSum=array[0];            for(int i=1;i<array.length;i++){                if(total>=0)                    total+=array[i];                else                    total=array[i];                if(total>maxSum)                    maxSum=total;            }            return maxSum;        }             }}


解法二:

//动态规划publicclassSolution {    publicintFindGreatestSumOfSubArray(int[] array) {        if(array.length==0)            return0;        int temp=array[0],maxSum=array[0];//注意初始值 不能设为0 防止只有负数        for(inti=1;i<array.length;i++){//从1开始 因为0的情况在初始化时完成了            tempuSum=(tempSum<0)?array[i]:tempSum+array[i];            sum=(tempSum>sum)?tempSum:sum;         }        return sum;    } }





原创粉丝点击