您的位置:首页 > 其它

在线算法

2020-04-06 07:18 260 查看

理解:在开始的时候不知道全部的输入,实时的根据每加入的一个数据改变给出的结果,“在线
相对而言,离线算法就是一开始记录所有的输入,一次性给出结果

同样是最大子序列问题:
和前面那个动态规划算法的思路有部分类似:
从前往后一次累加,如果是负数,则归零,并记录在该过程中的最大值
原因:遇到负数-让后面的部分变小了

写的有一点乱,题目PAT A1007,第4个测试点还是没过,等我找到原因了再来。

#include <stdio.h>
#define MAX 10010
int array[MAX];
int tempfirst;
int max,first,last;

int main(){
int num;
int flag=0;
int sum=0;
max=-1;
tempfirst=1;
first=1;
scanf("%d",&num);
for(int i=0;i<num;i++){
scanf("%d",&array[i]);
sum+=array[i];
if(sum<0){
sum=0;
flag=1;
continue;
}if(flag){
tempfirst=array[i];
flag=0;
}
if(sum>max){
first=tempfirst;
max=sum;
last=array[i];
}
}
if(max<0){
printf("0 %d %d",array[0],array[num-1]);
}else{
printf("%d %d %d",max,first,last);
}
return 0;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
Pluto-wei 发布了4 篇原创文章 · 获赞 3 · 访问量 93 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: