题目描述
给定一个数组a[0,…,n-1],求其最大子数组(长度>=1)和
输入描述
第一行一个整数n(1<=n<=5000),然后依次输入n个整数(每个整数范围[-5000, 5000])
输出描述
输出一个整数表示最大子数组和
样例输入
5
1 -1 1 1 -1
样例输出
2
动态内存分配,数组
效率还行,能过选做题。
#include "stdafx.h"
#include <iostream>
using namespace std;
int MaxSum(int a[],int size)
{
int sum = 0;
int count = sum;
for (int i = 0; i < size; i++)
{
count = count + a[i];
if (count > sum)
sum = count;
if (count < 0)
count = 0;
}
//考虑下全为负的情况
if (sum == 0)
{
sum = a[0];
for (int i = 0; i<size; i++)
{
if (sum < a[i])
sum = a[i];
}
}
return sum;
}
int main()
{
int n=0;
cin >> n;
int *p;
p = new int[n];
for(int i=0;i<n;i++)
{
cin >> p[i];
}
//调试语句,请忽略
/*for(int i=0;i<n;i++)
{
cout << p[i] ;
}*/
int sum=0;
sum = MaxSum(p, n);
cout << sum;
delete[]p;
return 0;
}