经典算法,时间复杂度O(n) 。因为输入数据量庞大,读取用getchar() 函数优化。
#include <math.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getdigit(void)
{
int temp = 0;
int symbol = 1;
char ch;
while (1)
{
ch = getchar();
if (ch == ' ' || ch == '\n' || ch == EOF)
return temp * symbol;
if (ch == '-')
symbol = -1;
else
temp = temp * 10 + ch - '0';
}
}
void putdigit(int temp)
{
if (temp >= 10)
putdigit(temp / 10);
putchar(temp % 10 + '0');
}
int main(int argc, char const *argv[])
{
int cnt;
cnt = getdigit();
int nowsum = 0, grosssum = 0;
while (cnt--)
{
int temp;
temp = getdigit();
nowsum += temp;
if (nowsum > grosssum)
grosssum = nowsum;
else if (nowsum < 0)
nowsum = 0;
}
putdigit(grosssum);
putchar('\n');
return EXIT_SUCCESS;
}
100000个随机数时,耗时6ms