#include<iostream>
using namespace std;
int main(){
/*
在线处理字符串最大子列和算法
思想:每次输入都处理一次数据,若当前的累计子列和为负数,则舍弃,若为正数则记录,且记下历史最大值
遍历一遍字符串后,则输出历史最大子列和
时间 O(N),空间 O(1)
*/
// 子序列初始化
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i++){
cin>>arr[i];
}
// 以下是 在线处理-算法 的核心
int now=0,max=0;
for(int i=0;i<n;i++){
now+=arr[i];
if(now>max){
max=now; // 更新
}else if(now<0){
now=0; // 丢掉
}
}
cout<<max;
}
// 还有比较笨的就是用两个 for遍历序列,统计出所有情况,得到最大子序列和,时间 O(N^2),空间 O(1)
在线处理-求字符串最大子列和算法
最新推荐文章于 2024-08-10 15:25:17 发布