问题详情
问题分析:
- 我想到了差分数组,先一个个累加,连续的序列和等于差分数组两个数的差,只要遍历差分数组,用遍历到的数字减差分数组中这个数之前的最小的数,等于当前遍历到的数为序列尾的最大连续序列和。遍历所有差分数组里的数,找到最大值。
- 一共num个数
- tem当前输入的数字
- minn表示在差分数组中当前遍历到的数字之前的最小的序列和
- maxsum表示当前找到的最大连续序列和
- 下面程序一边输入一边计算最大值,降低时间复杂度
#include <cstdio>
int num, tem, minn, maxsum, sum;
int main(){
scanf("%d", &num);
while (num--) {
scanf("%d", &tem);
sum += tem;
maxsum = (sum - minn) > maxsum ? sum - minn : maxsum;
minn = sum < minn ? sum : minn;
}
if (maxsum)
printf("%d", maxsum);
else
printf("0");
}