最大连续子序列的和与积

来源:互联网 发布:o2o软件开发 编辑:程序博客网 时间:2024/06/05 17:35
这是两个非常相似的问题,最大子序列和思路:当前面加的数据和小于等于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

0 0