首先,自己的第一想法是 找出两个相邻元素和最大的两元素,然后分别从左右再计算。
后来才知道错了= = ||。
(下面算法只是找到了最大和,未找元素下标)

  1. 复杂度为O(N * N * N)的算法,也是最暴力的解法
int maxsubseqsum(int *list,int n)
{int i,j,k;int thissum,maxsum=0;for(i=0;i<n;i++){thissum=0;for(j=i;j<n;j++){for(k=i;k<j;k++){thissum+=list[k];}if(thissum>maxsum){maxsum=thissum;}}}return maxsum;
}
  1. 在上述算法进行优化。上面有许多无用计算,我们可以把计算过的保存起来。复杂度为O(N*N)
int maxsubseqsum(int *list,int n)
{int i,j,k;int thissum,maxsum=0;for(i=0;i<n;i++){thissum=0;for(j=i;j<n;j++){thissum+=list[j];}if(thissum>maxsum){maxsum=thissum;}}return maxsum;
}
  1. 分治算法,复杂度
    记总的的为T(N)=2T(N/2)(两个递归)+O(N)(跨界求和的循环),然后展开,为2^
    k
    T(N/2^k)+kO(N),
    直到2^k=N,所以有T(N)=N
    T(1)+lgN(就是lnN)o(N)=O(NlgN);

这个递归我理解了很长时间,哎。

就用这个例子吧
首先center=4;

(list,1,4)=8
{(list,1,2)=3{(list,1,1)=3;(list,2,2)=0;本是-2}(list,3,4)=5{(list,3,3)=5;(list,4,4)=0;本是-3}
}(list,5,8)=14
{(list,5,6)=11{(list,5,5)=4;(list,6,6)=7;本是-2}(list,7,8)=9{(list,7,7)=0,本是-6;(list,8,8)=9;}
}
接下来就是跨段和
从4 3 2 1 和 5 6 7 8分别计算,所得maxleft+maxright=17;
用max(8,14,17),故为17
int max3(int a,int b,int c)
{return a>b?a>c?a:c:b>c?b:c;/*if a>b{if a>cmax=aelsemax=c}else{if b>cmax=belsemax=c}*/
}
int divid_and_conquer(int *list,int left,int right)
{int max_left_sum,max_right_sum;int max_left_border_sum,max_right_border_sum;int left_border_sum,right_border_sum;int center,i;if(left==right){if(list[left]>0) return list[left];else return 0;}max_left_sum=divid_and_conquer(list,left,center);max_right_sum=divid_and_conquer(list,center+1,right);分段求和 max_left_border_sum=left_border_sum=0;for(i=center;i>=left;i--){left_border_sum+=list[i];if(left_border_sum>max_left_border_sum)max_left_border_sum=left_border_sum;}扫描右边 max_right_border_sum=right_border_sum=0;for(i=center+1;i<=right;i++){right_border_sum+=list[i];if(right_border_sum>max_right_border_sum)max_right_border_sum=right_border_sum;}return max3(max_left_sum,max_right_sum,max_right_border_sum+max_left_border_sum);
}
  1. 在线算法,复杂度为O(N),我们可以简单证明为最快的算法:所有数据必须要处理一遍,所以O(N)的算法最快,即只处理一遍数据。
int maxsubseqsum(int *list,int n)
{int thissum,maxsum;thissum=maxsum=0;for(int i=0;i<n;i++){thissum+=list[i];if(thissum>maxsum)maxsum=thissum;else if(thissum<0)thissum=0;//一旦出现负的,我们就不需要在往下加了}return maxsum;}

hdu-1003 or 最大子序列和(四种解题方法)相关推荐

  1. php xml对象解析_php解析xml 的四种简单方法(附实例)

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

  2. python安装第三方库-python第三方库的四种安装方法

    讲解一下python第三方库的四种安装方法 问题场景 (我的操作系统windows): 我使用pip install selenium 发现先爆出一大段黄色警告日志,最后是两段红色的错误日志,无法成功 ...

  3. python下载文件到本地-Python下载网络文本数据到本地内存的四种实现方法示例

    本文实例讲述了Python下载网络文本数据到本地内存的四种实现方法.分享给大家供大家参考,具体如下: import urllib.request import requests from io imp ...

  4. python token post403原因_Django的POST请求时因为开启防止csrf,报403错误,及四种解决方法...

    Django默认开启防止csrf(跨站点请求伪造)攻击,在post请求时,没有上传 csrf字段,导致校验失败,报403错误 解决方法1: 注释掉此段代码,即可. 缺点:导致Django项目完全无法防 ...

  5. 51单片机有几个通用io口_51单片机IO口的四种使用方法

    原标题:51单片机IO口的四种使用方法 传统51单片机IO接口只可以作为标准双向IO接口,如果用其来驱动LED只能用灌电流的方式或是用三极管外扩驱动电路. 灌电流方式 LED正极接VCC,负极接IO口 ...

  6. vue移动端html5页面根据屏幕适配的四种解决方法

    最近做了两个关于h5页面对接公众号的项目,不得不提打开微信浏览器内置地图导航的功能确实有点恶心.下次想起来了的话,进行总结分享一下如何处理.在vue移动端h5页面当中,其中适配是经常会遇到的问题,这块 ...

  7. 计算机无法连接无线信号,win7系统连接无线信号时提示Windows无法连接到路由器名称的四种解决方法...

    现如今网络发展速度非常快,无线网络已经普及了,使用率高了遇到的问题也就多了.比如有时候笔记本win7系统连接无线信号时出现"Windows无法连接到路由器名称"(如下图所示),该如 ...

  8. ipa解包打包工具_ios打包ipa的四种实用方法(.app转.ipa)

    总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏->Product->Archive->三选 ...

  9. ios打包ipa的四种实用方法(.app转.ipa)

    [原]ios打包ipa的四种实用方法(.app转.ipa) 总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏- ...

最新文章

  1. @Bean 与@Component的区别
  2. 人工智能技术,对智慧交通的发展带来巨大影响
  3. [poj] 2318 TOYS || 判断点在多边形内
  4. Scrapy定向爬虫教程(三)——爬取多个页面
  5. xgboost论文公式解析
  6. 事务概念和事务四大特性和隔离级别
  7. 端口镜像 流量过滤_在 AWS 云环境中滥用 VPC 流量镜像抓取网络流量
  8. Java 重写 多态性_Java 学习(12):重写(Override)与重载(Overload) 多态
  9. MYSQL数据库管理与应用
  10. Android OTA本地自动升级实现
  11. Android | Sensor.TYPE_ORIENTATION被废弃后的解决办法
  12. 《京东话费充值系统架构演进实践》读后感
  13. MBTI职业性格在软件研发组织中不同岗位的分布研究
  14. 英语人机考试计算机算分吗,揭秘 | 英语“人机对话”听说考试提分策略 注意事项,收藏备用 !...
  15. 淘宝彩票移动项目开发实践
  16. 《ROS机器人开发实践》使用RoboWare创建talker和listener程序
  17. 禁用格式工厂的Bright Data
  18. java计算机毕业设计ssm智慧餐厅点餐管理系统
  19. dayjs,当年月周日
  20. VUE element-ui之上传身份证照片正反面详细代码

热门文章

  1. 【OpenCV 4开发详解】轮廓发现与绘制
  2. 链表问题9——复制含有随机指针节点的链表(初阶)
  3. 在有序数字中寻找和为k的两个数 O(n)
  4. python新手任务:python循环嵌套
  5. rabbitmq利用死信队列+TTL 实现延迟队列
  6. 黄聪:原生js的音频播放器,兼容pc端和移动端(原创)
  7. SAX解析XML文档——(二)
  8. 通过yiic来创建yii应用
  9. linux 下 ifcfg-eth0 配置
  10. [推荐]Silverlight 2 开发者海报