问题描述
给定n个整数(可能有负数),求子序列和的最大值(如果所有整数均为负数,则最大子序列和为0)。
输入
6
-2 11 -4 13 -5 -2
输出
20
算法1
思路
对于整数序列a[n],设置两层for循环,第一层用 i 标记当前子序列的首元素,第二层用 j 标记当前子序列的尾元素。针对每一个 j ,我们计算出当前的子序列和,并取大者作为临时最大值max。在此次 j 循环结束之后,我们得到以当前 i 为首元素的最大子序列和max。i 循环结束后,我们可以得到子序列的最大和。此算法时间复杂度为O(n2)。
实现
#include <iostream>
using namespace std;
int main()
{
int a[100]={
0};
int n;
int start=0;
int end=0;
cout<<"元素总个数:";
cin>>n;
cout<<"各元素分别为:";
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int sum = 0;
int max = 0;
for(int i=0;i<n;i++) // 起始下标
{
sum=a[i];
for(int j=i+1;j<n;j++) // 结束下标
{
sum+=a[j];
if(sum>max)
{
max=sum;
start=i+