最大连续和问题【四种不同的算法】
给出一个长度n的序列:A1,A2,A3,……,An。求最大连续子段和。
即:要求找到1<=i<=j<=n,使得A[i]+ A[i+1]+……+A[j]尽量大。
题目来源:
洛谷OJ: P1115 最大子段和
题目描述
给出一段序列,选出其中连续且非空的一段使得这段和最大。
输入格式:
输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度。
第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列。
输出格式:
输入文件maxsum1.out仅包括1个整数,为最大的子段和是多少。子段的最小长度为1。
输入样例#1:
7
2 -4 3 -1 2 -4 3
输出样例#1:
4
说明
【样例说明】2 -4 3 -1 2 -4 3
【数据规模与约定】
对于40%的数据,有N ≤ 2000。
对于100%的数据,有N ≤ 200000。
1 #include<stdio.h> 2 #include<stdlib.h> 3 long long fun1(int a[],int n)//返回最大连续子段和。O(n^3),可以获取子段位置 4 { 5 int i,j,k; 6 long long best=a[0],sum;//初始最大值 7 int bestI=0,bestJ=0; 8 9 for(i=0;i<n;i++) 10 { 11 for(j=i;j<n;j++) 12 { 13 sum=0; 14 for(k=i;k<=j;k++) sum=sum+a[k]; 15 if(sum>best) { best=sum; /*bestI=i; bestJ=j;*/ } 16 } 17 } 18 return best; 19 } 20 long long fun2(int a[],int n)//返回最大连续子段和。O(n^2),可以求得子段的位置。 21 { 22 int *s=(int *)malloc(sizeof(int)*n); 23 int i,j,bestI=0,bestJ=0; 24 long long best,sum; 25 26 s[0]=a[0]; 27 for(i=1;i<n;i++) s[i]=s[i-1]+a[i]; 28 29 best=a[0]; 30 for(i=0;i<n;i++) 31 { 32 for(j=i;j<n;j++) 33 { 34 if(i==0) sum=s[j]; 35 else sum=s[j]-s[i-1]; 36 best=(sum>best?sum:best); 37 //if(sum>best) { best=sum; bestI=i; bestJ=j; } 38 } 39 } 40 free(s); 41 return best; 42 } 43 long maxSum(int a[],int x,int y)//返回序列a[]在下标[x,y)范围内的最大子段和。O(nlogn),无法求得最大子段位置 44 { 45 long mid,V,L,R; 46 long max,s1,s2,s3; 47 int i; 48 49 if(y-x==1)return a[x];//假如只有一个元素,最大子段和就是该元素本身 50 51 mid=x+(y-x)/2;//分治法第一步:划分为[x,m)和[m,y)两个子段 52 s1=maxSum(a,x,mid);//分治法第二部:递归求解 53 s2=maxSum(a,mid,y); 54 max=(s1>s2?s1:s2); 55 56 V=0;L=a[mid-1];//分治法第三步:合并(1)——从分界点开始往左的最大连续子段和 57 for(i=mid-1;i>=x;i--) { V=V+a[i]; L=(V>L?V:L); } 58 59 V=0;R=a[mid];//分治法第三步:合并(2)——从分界点开始往右的最大连续子段和 60 for(i=mid;i<y;i++) { V=V+a[i]; R=(V>R?V:R); } 61 62 V=L+R; 63 return (V>max?V:max);//把子问题的解与L+R比较 64 } 65 long fun4(int a[],int n)//返回a[]的最大子段和 66 { 67 long temp,sum; 68 int i; 69 temp=a[0];sum=a[0]; 70 for(i=1;i<n;i++) 71 { 72 if(temp<0) temp=a[i]; 73 else temp=temp+a[i]; 74 if(temp>sum) sum=temp; 75 } 76 return sum; 77 } 78 int main(int argc, char *argv[]) 79 { 80 int n,i,a[200003]; 81 long long ans; 82 freopen("testdata.in","r",stdin); 83 84 scanf("%d",&n); 85 for(i=0;i<n;i++) scanf("%d",&a[i]); 86 //ans=fun1(a,n); //超时 87 //ans=fun2(a,n); //得部分分,其余测试点超时 88 //ans=maxSum(a,0,n); //AC 89 ans=fun4(a,n); //AC 90 printf("%lld\n",ans); 91 return 0; 92 }
最大连续和问题【四种不同的算法】相关推荐
- bat判断文件是否存在_BAT面试必问题系列:JVM判断对象是否已死和四种垃圾回收算法总结...
JVM系列: 面试题一:判断对象是否已死 判断对象是否已死就是找出哪些对象是已经死掉的,以后不会再用到的,就像地上有废纸.饮料瓶和百元大钞,扫地前要先判断出地上废纸和饮料瓶是垃圾,百元大钞不是垃圾.判 ...
- PHP实现四种基本排序算法
###PHP实现四种基本排序算法 前提:分别用冒泡排序法, 快速排序法, 选择排序法, 插入排序法将下面数组中的值按照从小到大的顺序进行排序. (1)冒泡算法 $arr=array(1,43,54,6 ...
- php四种基础排序算法的运行时间比较
/*** php四种基础排序算法的运行时间比较* @authors Jesse (jesse152@163.com)* @date 2016-08-11 07:12:14*/ //冒泡排序法 func ...
- 基本的排序算法php,php四种基础排序算法
原标题:php四种基础排序算法 曾经有网友问我关于面试题的问题,今天就发一个面试题笔试经常会出的排序算法,大家可以参考一下,如有问题可以给我留言. /** * php四种基础排序算法的运行时间比较 * ...
- [转载] java实现四种常用排序算法
参考链接: 用Java排序 四种常用排序算法 ##注:从小到大排 ##冒泡排序## 特点:效率低,实现简单 思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有 ...
- NIST发布四种抗量子密码算法
导读 近日,美国商务部国家标准与技术研究所(NIST)公布了首批四种抗量子加密算法,这是自2016年启动后量子密码标准化项目以来,NIST首次发布入围标准的抗量子算法. 抢占抗量子算法的标准阵地 抗量 ...
- 五分钟让你搞懂Nginx负载均衡原理及四种负载均衡算法
前言 今天这篇文章介绍了负载均衡的原理以及对应的四种负载均衡算法,当然还有对应的指令及实战,欢迎品尝.有不同意见的朋友可以评论区留言! 负载均衡 所谓负载均衡,就是 Nginx 把请求均匀的分摊给上游 ...
- 【讲解 + 模板】四种最短路算法的比较
四种最短路算法的比较 最短路 最短路,顾名思义,最短的路径. 我们把边带有权值的图称为带权图.边的权值可以理解为两点之间的距离.一张图中任意两点之间会有不同的路径相连.最短路径就是指连接两点的这些路径 ...
- 选择排序稳定吗_最常见的四种数据结构排序算法你不知道?年末怎么跳槽涨薪...
前言 在学习数据结构的时候必然接触过排序算法,而且在日常开发中相信排序算法用得也比较多.而排序算法众多,各个效率又不同,难以记住.小编今天会介绍一些常用排序算法的特点和实现,对比不同排序算法的效率. ...
- PHP 四种基本排序算法的代码实现(2)
2019独角兽企业重金招聘Python工程师标准>>> 许多人都说算法是程序的核心,算法的好坏决定了程序的质量.作为一个初级phper,虽然很少接触到算法方面的东西.但是对于基本的排 ...
最新文章
- 机器学习填坑:你知道模型参数和超参数之间的区别吗?
- 宏基因组合种树,2-4天领证,1/2号车满员,3号车成立,机会来了
- 为什么在大型 Angular 应用里我们需要使用 ngrx
- linux memcached 运行,linux下查看Memcached运行状态
- nlp2-数学基础(信息论,概率论、词义消歧)
- 华为交换机S3700-TELNET远程管理交换机配置
- win10下openpose1.5安装
- MVC上传文件受限制
- 【零基础学Java】—对象的向上和向下转型(二十七)
- 面对疫情等群体性危机,程序员如何在家高效办公?
- 事故记录-过多进程致使CPU卡死
- 黑莓7290使用技巧-转载
- Python视频制作 MoviePy框架的基础使用
- mysql中FIND_IN_SET函数用法
- 读DL论文心得之RCNN
- 蓄力一纪,可以远矣!十二年的百度地图和他的AI新征程
- BUUCTF刷题记录 Harley Quinn
- linux 查询文件大小大于1g_必备linux命令有哪些?你了解多少
- 阿里云云计算ACP学习(七)---弹性伸缩服务AS
- 推荐一款word转pdf超好用的包:aspose-words(解决中文乱码)
热门文章
- Redis-集群监控之Redis monitor
- 计算机基础职教云答案,计算机基础课程答案
- orm和mysql_orm与mysql
- java join()用法_四种联系(join)的区别及用法
- dvt高危患者的护理措施_dvt的预防及护理
- 各种门锁的内部结构图_便宜超好用:小米智能门锁 E上手体验报告
- js滚动条下拉一定值_JS逆向 | 无限Debugger之淘大象
- mysql11导入数据_MySQL专题11之MySQL导出数据、MySQL导入数据
- C语言递归算法(二)
- 互联网晚报 | 8月28日 星期六 | 我国网民规模超10亿;vivo首款自研影像芯片下月首发;同程艺龙拟改名为同程旅行...