所有代码均通过G++编译器测试,仅为练手纪录。
//面试题31:连续子数组的最大和
//题目:输入一个整型数组,数组里面有正数也有负数。数组中一个或连续的多个整数组成一个字数组。。
// 求所有子数组的和的最大值。要求时间复杂度为O(n)。
//面试题31:连续子数组的最大和
//题目:输入一个整型数组,数组里面有正数也有负数。数组中一个或连续的多个整数组成一个字数组。。
// 求所有子数组的和的最大值。要求时间复杂度为O(n)。
int GetMaxSum(int *pNum,int nSize)
{
if(NULL == pNum || nSize <= 0)
{
return -1;
}
int nCurSum = 0;
int nMaxSum = 0x80000000;
for(int i = 0; i< nSize; ++i)
{
if(nCurSum <= 0)
{
nCurSum = pNum[i];
}
else
{
nCurSum += pNum[i];
}
if(nCurSum > nMaxSum)
{
nMaxSum = nCurSum;
}
}
return nMaxSum;
}
void TestGetMaxSum()
{
int arrValue[] = {1,-2,3,10,-4,7,2,-5};
LogInfo("GetMaxSum:%d",GetMaxSum(arrValue,sizeof(arrValue)/sizeof(int)));
}