c:
方法一:
时间复杂度为:
#include <stdio.h>
//#include <time.h>
#define MAX 100000
//clock_t start, stop;
//double duration;
int main(void)
{
//start = clock();
//stop = clock();
int K, i, arr[MAX];
int k, maxSum, tempSum;
scanf("%d", &K);
for (i = 0; i < K; i++)
{
scanf("%d", &arr[i]);
}
maxSum = 0;
for (i = 0; i < K; i++)
{
tempSum = 0;
for (k = i; k < K; k++)
{
tempSum += arr[k];
if (tempSum > maxSum)
{
maxSum = tempSum;
}
}
}
printf("%d\n", maxSum);
return 0;
}
方法二:
时间复杂度为:
#include <stdio.h>
//#include <time.h>
#define MAX 100000
//clock_t start, stop;
//double duration;
int main(void)
{
//start = clock();
//stop = clock();
int K, i, arr[MAX];
int maxSum, tempSum;
scanf("%d", &K);
for (i = 0; i < K; i++)
{
scanf("%d", &arr[i]);
}
maxSum = 0;
tempSum = 0;
for (i = 0; i < K; i++)
{
tempSum += arr[i];
if (tempSum > maxSum)
{
maxSum = tempSum;
}
if (tempSum < 0)
{
tempSum = 0;
}
}
printf("%d\n", maxSum);
return 0;
}
c++:
方法一:
#include <set>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int a[100000];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
int msum = 0;
for (int i = 0; i < n; i++) //开始的位置
{
int sum = 0; //a[i]--->a[j]的和
for (int j = i; j < n; j++) //结束的位置
{
sum += a[j]; //同一个i,每次相加1个就可以
if (sum > msum)
msum = sum;
}
}
printf("%d\n", msum);
return 0;
}
方法二:
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int a[100001];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
int sum = 0, maxsum = 0;
for (int i = 0; i < n; i++)
{
sum += a[i]; //依次向右累加
if (sum > maxsum)
maxsum = sum; //更新最大值
else if (sum < 0)
sum = 0; //如果当前和为负数,那么后面的和会减小,所以需要新的起点。
}
printf("%d\n", maxsum);
return 0;
}