连续子数组的最大和
连续子数组的最大和的问题相信大家都不会陌生了,代码如下:
int MaxSubSum(int arr[],int len)
{
int i;
int MaxSum = 0;
int ThisSum= 0;
for(i=0;i<len;i++)
{
ThisSum+= arr[i];
if(ThisSum > MaxSum)
{
MaxSum = ThisSum;
}
/*如果累加和出现小于0的情况,
则和最大的子序列肯定不可能包含前面的元素,
这时将累加和置0,从下个元素重新开始累加 */
else if(ThisSum< 0)
{
ThisSum = 0;
}
}
return MaxSum;
}
连续子数组的最小和
连续子数组的最小和,网上讨论的比较少,这里给出我自己的代码:
经过一些吐槽,重新编写这段代码:
int MinSum(int a[],int len)
{
for(int i = 0;i<len;i++)
{
a[i]=a[i]*(-1);//
}
return (-1)*MaxSubSum(a,len);
}
int main()
{
int a[7]={3, -4, 2, -3, -1, 7, -5};
int minSum = MinSum(a,7);
return minSum;
}
经过几组测试用例,还可以,如果有问题,希望指出。