博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构与算法分析——分治法
阅读量:5375 次
发布时间:2019-06-15

本文共 1463 字,大约阅读时间需要 4 分钟。

#include
int bigger(int a,int b){ return (a>b?a:b);}int max(int a,int b,int c){ return bigger(a,bigger(b,c));}int maxsubsequencesum(const int A[],int left,int right){ int maxleftsum,maxrightsum; int maxleftbordersum,maxrightbordersum; int leftbordersum,rightbordersum; int centre; if(left==right) { if(A[left]>0) return A[left]; else return 0; } centre = (left+right)/2; maxleftsum=maxsubsequencesum(A,left,centre); maxrightsum=maxsubsequencesum(A,centre+1,right); maxleftbordersum=0;leftbordersum=0; for (int i = centre; i >= left; --i) { leftbordersum+=A[i]; if(leftbordersum>maxleftbordersum) maxleftbordersum=leftbordersum; } maxrightbordersum=0;rightbordersum=0; for (int i = centre+1; i<=right;++i) { rightbordersum+=A[i]; if(rightbordersum>maxrightbordersum) maxrightbordersum=rightbordersum; } return max(maxleftsum,maxrightsum,maxrightbordersum+maxleftbordersum);}int main(){ int n; scanf("%d",&n); int A[100]; for (int i = 0; i < n; ++i) { scanf("%d",&A[i]); } printf("%d\n",maxsubsequencesum(A,0,n-1));}

 

看了一下午,终于把算法时间复杂度看完!

然后学着来敲这个O(NlogN)的分治法找最大连续和,这堆代码主要是找4,-3,5,-2,-1,2,6,-2的最大连续和(当然也适用于其他数列)。

 

主要感想和问题:

首先遇到了scope的问题,没搞清楚const和extern,intern,auto,register,static的区别!

然后是日常的敲错了代码运动不起来,模仿了两次都不行,然后最后一下自己推倒重来!果然看书上代码不能照搬,一定要彻底理解了再动手自己亲自敲。

转载于:https://www.cnblogs.com/malongqianyue/p/6107994.html

你可能感兴趣的文章
SSH-struts2的异常处理
查看>>
《30天自制操作系统》学习笔记--第14天
查看>>
LGPL协议的理解
查看>>
1、Python基础
查看>>
Unity The Tag Attribute Matching Rule
查看>>
试着理解下kvm
查看>>
WebService学习总结(二)--使用JDK开发WebService
查看>>
Tizen参考手机RD-210和RD-PQ
查看>>
竞价广告系统-位置拍卖理论
查看>>
策略模式 C#
查看>>
[模板]树状数组
查看>>
设计模式学习的好方法
查看>>
感谢Leslie Ma
查看>>
几种排序方法
查看>>
查看数据库各表的信息
查看>>
第一阶段测试题
查看>>
第二轮冲刺第五天
查看>>
图片压缩
查看>>
Hadoop-2.6.5安装
查看>>
ES6思维导图
查看>>