Fetch the repository succeeded.
#include<iostream>
#include<cstdlib>
using namespace std;
bool g_InvalidInput = false;
int getMaxSum(int *a, int len, int start, int end)
{
if (a == NULL || len <= 0)
{
g_InvalidInput = true;
return 0;
}
g_InvalidInput = false;
start = 0;
end = 0;
if (1 == len)
return a[0];
int curSum = a[0]; //当前子数组和
int maxSum = curSum; //子数组最大和
for (int i = 1; i < len; i++)
{
if (curSum > 0)
curSum += a[i];
else
if (a[i] > curSum) //确定子数组起始位置
{
start = i;
curSum = a[i]; //即使数组全为负,也能得到最大值
}
if (curSum > maxSum)
{
maxSum = curSum;
end = i;
}
}
return maxSum;
}
int getstart(int *a, int len, int start, int end)
{
if (a == NULL || len <= 0)
{
g_InvalidInput = true;
return 0;
}
g_InvalidInput = false;
start = 0;
end = 0;
if (1 == len)
return a[0];
int curSum = a[0]; //当前子数组和
int maxSum = curSum; //子数组最大和
for (int i = 1; i < len; i++)
{
if (curSum > 0)
curSum += a[i];
else
if (a[i] > curSum) //确定子数组起始位置
{
start = i;
curSum = a[i]; //即使数组全为负,也能得到最大值
}
if (curSum > maxSum)
{
maxSum = curSum;
end = i;
}
}
return start;
}
int getend(int *a, int len, int start, int end)
{
if (a == NULL || len <= 0)
{
g_InvalidInput = true;
return 0;
}
g_InvalidInput = false;
start = 0;
end = 0;
if (1 == len)
return a[0];
int curSum = a[0]; //当前子数组和
int maxSum = curSum; //子数组最大和
for (int i = 1; i < len; i++)
{
if (curSum > 0)
curSum += a[i];
else
if (a[i] > curSum) //确定子数组起始位置
{
start = i;
curSum = a[i]; //即使数组全为负,也能得到最大值
}
if (curSum > maxSum)
{
maxSum = curSum;
end = i;
}
}
return end;
}
int main(){
int smax,start,send;
int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
smax=getMaxSum(a,17,0,16);
cout<<"最大的子数组和为:"<<smax<<endl;
start=getstart(a,17,0,16);
cout<<"最大的子数组开始下标为:"<<start<<endl;
send=getend(a,17,0,16);
cout<<"最大的子数组结束下标为:"<<send<<endl;
system("pause");
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。