看书、思考、写代码。

/***************************************
* copyright@hustyangju
* blog: http://blog.csdn.net/hustyangju
* 题目:分治法求数组最大连续子序列和
* 思路:分解成子问题+合并答案
* 时间复杂度:O(n lgn)
* 空间复杂度:O(1)
***************************************/
#include <iostream> using namespace std; template<class type>
class max_subarray
{
public:
max_subarray(type *p):_p(p){}
~max_subarray(){}
type max_aside_subarray(int s,int e);
protected:
type max_cross_subarray(int s,int m,int e);
type _max(type a,type b,type c);
private:
type *_p;
}; template<class type>
type max_subarray<type>::_max(type a, type b, type c)
{
if((a>=b)&&(a>=c))
return a;
else if((b>=a)&&(b>=c))
return b;
else
return c;
} template<class type>
type max_subarray<type>::max_cross_subarray(int s, int m, int e)
{
type left_sum=*(_p+m);
type right_sum=*(_p+m+1);
for(int i=m;i>=s;i--)
{
type sum=0;
sum+=*(_p+i);
if(sum>left_sum)
left_sum=sum;
}//for
for(int i=m+1;i<=e;i++)
{
type sum=0;
sum+=*(_p+i);
if(sum>right_sum)
right_sum=sum;
}//for
return(left_sum+right_sum);
} template<class type>
type max_subarray<type>::max_aside_subarray(int s, int e)
{
int m=0;
type left_sum,right_sum,cross_sum;
if(s==e)
return(*(_p+s));
else
m=int((s+e)/2);
left_sum=max_aside_subarray(s,m);
cross_sum=max_cross_subarray(s,m,e);
right_sum=max_aside_subarray(m+1,e);
return _max(left_sum,cross_sum,right_sum);
} int main()
{
int array1[10]={1,-2,-3,4,5,6,-7,-8,9,10};
// float array2[10]={1.0,-2.0,-3.0,4.0,5.2,6.0,-7.0,-8.0,9.0,-10.0};
max_subarray<int> mysubarray1(array1);
//max_subarray<float>mysubarray2(array2);
cout<<"max sum of sub array is: ";
cout<<mysubarray1.max_aside_subarray(0,9)<<endl;
// cout<<"max sum of sub array is: ";
//cout<<mysubarray2.max_aside_subarray(0,9)<<endl;
}

《github一天一道算法题》:分治法求数组最大连续子序列和的更多相关文章

  1. 《github一天一道算法题》:并归排序

    看书.思考.写代码! /******************************************* * copyright@hustyangju * blog: http://blog.c ...

  2. 《github一天一道算法题》:插入排序

    看书.思考.写代码! /*********************************************** * copyright@hustyangju * blog: http://bl ...

  3. 每天一道算法题(12)——和为n的连续正数序列或者随机数

    题目:输入一个正数n,输出所有和为n 连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5.4-6 和7-8. 1.思路 尊崇以下策略: (1)对 ...

  4. 每天一道算法题(4)——O(1)时间内删除链表节点

    1.思路 假设链表......---A--B--C--D....,要删除B.一般的做法是遍历链表并记录前驱节点,修改指针,时间为O(n).删除节点的实质为更改后驱指针指向.这里,复制C的内容至B(此时 ...

  5. 分治法求一个N个元素数组的逆序数

    背景  逆序数:也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时, ...

  6. 从一道算法题实现一个文本diff小工具

    众所周知,很多社区都是有内容审核机制的,除了第一次发布,后续的修改也需要审核,最粗暴的方式当然是从头再看一遍,但是编辑肯定想弄死你,显然这样效率比较低,比如就改了一个错别字,再看几遍可能也看不出来,所 ...

  7. 算法笔记_065:分治法求逆序对(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 分治法(归并排序)   1 问题描述 给定一个随机数数组,求取这个数组中的逆序对总个数.要求时间效率尽可能高. 那么,何为逆序对? 引用自百度 ...

  8. js算法:分治法-循环赛事日程表

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  9. 【每天一道算法题】时间复杂度为O(n)的排序

    有1,2,……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且一次只能交换两个数. 这个是以前看到的算法题,题目不难.但是要求比较多,排序算法中,时间 ...

随机推荐

  1. HTML5 Canvas Arc Tutorial

    HTML5 Canvas Arc Tutorial HTML5 Canvas Arc Tutorial  

  2. 【错误】:Could not open JDBC Connection for transaction; nested exception is: Communications link failure;The last packet sent successfully to the server was 1 milliseconds ago

    # #错误日志 2016-11-10 16:19:20,834 ERROR [org.quartz.core.JobRunShell] - Job DEFAULT.jobtask threw an u ...

  3. EasyUI DataGrid编辑单元格时使用combogrid

    仅提供一段columns配置代码供参考: conditions对象是一个已赋值的数组对象集合.下拉框数据可直接使用conditions数据,也可以通过url获取. columns : [[ { fie ...

  4. java中a++与++a区别

    java中a++与++a区别 a++与++a的区别,如果单独使用没有任何区别,如果在运算中就有区别了,a++是先运算在赋值,而++a是先赋值在运算!! 先看a++的代码哦 class demo1 { ...

  5. QT_编程基础

    简单介绍 Qt是一个由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既能够开发GUI程式,也可用于开发非GUI程式,比方控制台工具和server. Qt是面向对象语言,易于扩展,而且同意组 ...

  6. 走进C++程序世界------继承和派生

    继承和派生 继承是面向对象编程语言的最重要方面之一,正确的使用继承可编写出设计良好,容易于维护和扩展的应用程序.下面是在其他博客中的总结: ****************************** ...

  7. sublime 快键

    Keyboard Shortcuts - Windows/Linux Warning This topic is a draft and may contain wrong information. ...

  8. Repository,UnitOfWork,DbContext(1)

    一.前言 终于到EF了,实在不好意思,最近有点忙,本篇离上一篇发布已经一个多星期了,工作中的小迭代告一段落,终于有点时间来继续我们的架构设计了,在这里先对大家表示歉意. 其实这段时间我并不是把这个系列 ...

  9. 搭建discuz论坛(2)

    修改host文件: 使用ab做性能测试: E:\Apache2.2\bin>ab -n1000 -c100 http://bbs.ct.gd/

  10. 出发 Let's Go

    今天是中秋佳节,而恰好我这天过生日,晚上睡觉前又恰好听到温岚唱的祝我生日快乐,心里挺高兴的. 最近,由于公司需要,可能要学习Python和Tribon了,全是未知的,一点不了解的东西,也忽然想起了在这 ...