您的位置:首页 > 编程语言

编程之美2.14扩展问题2 求数组的子数组之和的最大值并给出子数组的起始终止位置

2013-04-12 18:15 393 查看
#include <iostream>

#include <assert.h>

#include <fstream>

#include <stdio.h>

#include <string.h>

using namespace std;

int maxSum(int *a,int n,int &start,int &end)

{

 if(n<=0)

 {

  return 0;

 }

 int maxSum=a[n-1],sum=a[n-1];

 start=n-1; end=n-1;

 for(int i=n-2;i>=0;i--)

 {

  if(sum<=0)

  {

   end=i;

   sum=0;

  }

  sum+=a[i];

  if(sum>maxSum)

  {

   maxSum=sum;

       start=i;

  }

 }

 return maxSum;

}

int main()

{

 int a[]={1,-2,3,5,-3,2};

 int n=6;

 int start,end;

 int sum=maxSum(a,n,start,end);

 cout<<"最大值是 "<<sum<<"开始位置是 "<<start<<"结束位置是 "<<end<<endl;

 getchar();

 return 0;

}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐