题目
最大序列和
给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。对于S的所有非空连续子序列T,求和最大的子序列。
以上说明中:N 为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。
【输入说明】
在程序当前路径下存在文件input.data,程序从input.data中读取输入数据。
input.data为单行文本文件,存放着N个整数,数字之间用空格隔开。
【输出说明]
输出和最大的子序列,数字间以空格隔开。
【示例】
输入数据:1 -2 3 4 -10 6
输出数据:3 4
思路
- 应注意到一个规律:负数不能是最大序列的起点,那么问题就很好解了,和为负数的序列也不能作为起点
- 另外注意特殊情况:数据全是负数
- 时间复杂度:O(n)
代码
#include <iostream>
#include <fstream>
using namespace std;
#define N 1000000
int main(int argc, char** argv) {
fstream file("input.data");
bool all_m = true;//是否全是非正数
int *num = new int[N];
int len = 0;
while (!file.eof()) {
file >> num[len];
if (num[len] > 0) all_m = false;
len++;
}
if (all_m) {
int max = num[0];