题意分析:
(1)给出一组整数序列,求出这组整数序列中和最大的子序列的和,并给出子序列首位元素在原序列中的位置
(2)简单题,求最大子序列的和,采用两个指针first、last指向首元素,每次last向后移动一位,并计算从first到last之间的序列的和并更新最大和,当和小于0时,first与last重新初始化为当前last的下一个位置
可能坑点:
(1)当所有元素均为0的时候,应该是0 0 0
#include <iostream>
using namespace std;
int array[10001];
int start,final;
void getMaxSum(int array[],int num)
{
int max=0;
int sum=0;
for(int i=0,j=0;i<num&&j<num;j++)
{
sum+=array[j];
if(sum>max)
{
max=sum;
start=array[i];
final=array[j];
}
if(sum<0)
{
sum=0;
i=j+1;
}
}
cout<<max<<" "<<start<<" "<<final<<endl;
}
int main()
{
int K,i=0;
cin>>K;
int flag=1;
while(i<K)
{
cin>>array[i];
if(array[i]>=0)flag=0;
i++;
}
if(flag)
{
cout<<0<<" "<<array[0]<<" "<<array[K-1]<<endl;
return 0;
}
getMaxSum(array,K);
return 0;
}

本文介绍了一种求解整数序列中最大子序列和及其位置的算法,并提供了详细的实现步骤与示例代码。
351

被折叠的 条评论
为什么被折叠?



