最大连续子序列的和与积

这是两个非常相似的问题,最大子序列和思路:当前面加的数据和小于等于0时,就放弃前面的序列,用一个变量记录前面的最大和;依次计算子序列和,每次计算出的结果和之前保存的最大值相比较并更新最大值。

最大子序列积思路:他的条件判断变成前面数据的积为0是,就放弃前面的序列,其他思路和上面一样,重要的是他需要两次的遍历数组,因为很可能数组中负数是奇数个,这时候要找出负数两边的最大值,再比较这两边的那个大。
bool invalidInput=false;
int maxSumSubArray(int *a,int length){
    if(a==null || length<=0){
        return 0;
        invalidInput=true;
    }
    int max=a[0];
    int sum=a[0];
    for(int i=1;i<length;i++){
        if(sum<=0)
            sum=a[i];
        else
            sum+=a[i];
        if(sum>max)
            max=sum;
    }
        return max;
}

最大连续子序列的积就比上面多遍历了一遍,放弃前面序列的条件变了下
bool invalidInput=false;
int maxProductSubArray(int *a,int length){
    if(a==null || length<=0){
        return 0;
        invalidInput=true;
    }
    int max=0;
    int product=a[0];
    for(int i=1;i<length;i++)
    {
        if(product==0)
            product=a[i];
        else
            product*=a[i];
        if(product>max)
            max=product;
    }
    product=a[length-1];
    for(int j=length-2;i>=0;i--){
        if(product==0)
            product=a[i];
        else
            product*=a[i];
        if(product>max)
            max=product;
    }
        return max;
}        
参考了: http://www.cnblogs.com/iamccme/archive/2013/05/21/3091641.html

你可能感兴趣的:(最大连续子序列的和与积)