存在正负数数组的最大子数组和

从别人的博客看到,自己理解了一下。自己以前没有怎么弄过算法,感觉他在找工作中左右太大了(后悔当初没有去搞ACM,搞了些什么图形渲染之类的,都太片面,上层),现在想补一下,有好的论坛或网站希望大家能推荐推荐,小弟先谢过。


/***在一个有正数负数的数组里,求得最大子数组和(要求时间复杂度为O(n)即一次遍历)
通过累加的方式求得,遇到负数或是累加后为负数则重新定位新的最大值***/
#include
using namespace std;


int MaxSum(int* a, int n)  
{  
    int nSum = 0;  
    int nValue=0;  


    for(int i = 0; i < n; i++)  //一次遍历
    {  
        if (nValue <= 0)  //每次判断当前相加是否为负数,如果为负数则说明不是最大值,重新调整
{
          nValue = a[i];
}


        else 
{
          nValue += a[i];
}


        if(nSum < nValue)  
          nSum = nValue;  
    }  
    return nSum;  
}  
  
  
  
  
int main()
{  
    int anAry[] = {-2, 10,12, -24, -10};   
  
    int nMaxValue = MaxSum(anAry, sizeof(anAry)/sizeof(int));  
    cout << "最大的子数组和为:" << nMaxValue << endl;  
  
    return 0;  
}  

你可能感兴趣的:(存在正负数数组的最大子数组和)