《github一天一道算法题》:分治法求数组最大连续子序列和
看书、思考、写代码。
/***************************************
* 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一天一道算法题》:分治法求数组最大连续子序列和的更多相关文章
- 《github一天一道算法题》:并归排序
看书.思考.写代码! /******************************************* * copyright@hustyangju * blog: http://blog.c ...
- 《github一天一道算法题》:插入排序
看书.思考.写代码! /*********************************************** * copyright@hustyangju * blog: http://bl ...
- 每天一道算法题(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)——O(1)时间内删除链表节点
1.思路 假设链表......---A--B--C--D....,要删除B.一般的做法是遍历链表并记录前驱节点,修改指针,时间为O(n).删除节点的实质为更改后驱指针指向.这里,复制C的内容至B(此时 ...
- 分治法求一个N个元素数组的逆序数
背景 逆序数:也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时, ...
- 从一道算法题实现一个文本diff小工具
众所周知,很多社区都是有内容审核机制的,除了第一次发布,后续的修改也需要审核,最粗暴的方式当然是从头再看一遍,但是编辑肯定想弄死你,显然这样效率比较低,比如就改了一个错别字,再看几遍可能也看不出来,所 ...
- 算法笔记_065:分治法求逆序对(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 分治法(归并排序) 1 问题描述 给定一个随机数数组,求取这个数组中的逆序对总个数.要求时间效率尽可能高. 那么,何为逆序对? 引用自百度 ...
- js算法:分治法-循环赛事日程表
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- 【每天一道算法题】时间复杂度为O(n)的排序
有1,2,……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且一次只能交换两个数. 这个是以前看到的算法题,题目不难.但是要求比较多,排序算法中,时间 ...
随机推荐
- ubuntu查看硬件信息
1,外部探针probe sudo apt-get install hwinfo 执行hwinfo获取系统信息 --short
- PHP安装和配置
编译安装php5-5.2.6-49.11.src.rpm: ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin ...
- 什么是FastCGI?
什么是FastCGI? PHP的FastCGI使你的所有php应用软件通过mod_fastci运行,而不是mod_phpsusexec.FastCGI应用速度很快 是因为他们持久稳定.不必对每一个请求 ...
- 安装Oracle11后在SQL Developer启动时提示:enter the full pathname for the java.exe
1) Open the file ..\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf and add the following line to se ...
- 关于.netFramework概述
这几天学了不少东西,想来还是应该总结一下,一来自己回顾一下,二来也怕自己忘记,在文章中,有很多东西就是借鉴别人的blog,笔者在这里对他们的无私奉献表示感谢.笔者的语言组织能力有限,如果在文章中出现什 ...
- JavaScript关闭浏览器
(*^__^*) 嘻嘻……,以前我找关闭浏览器选项卡的代码找不到,我还以为要用后台代码关呢?今天发现只要简单2句JavaScipt代码就可以了.看来很多东西还是在于平时的积累啊的说! 模仿延儿的口气了 ...
- dl dt dd标签
<dl>标记定义了一个定义列表,定义列表中的条目是通过使用<dt>标记(“definition title”,定义标题)和<dd>标记(“definition de ...
- CSS学习笔记——CSS中定位的浮动float
昨天在解决了盒模型的问题之后又出现了新的知识模糊点:浮动和绝对定位?今天先解决浮动相关的问题,首先列举出想要解决的问题: 1.浮动到底是怎么样的? 2.浮动对元素的影响有什么? 3.浮动主要用来干什么 ...
- 给远程桌面发送“Ctrl+Alt+Delete”组合键
首先: 在运行里,输入osk, 打开软键盘 然后,这时先按下本地键盘的Ctrl和Alt键,再点远程"软键盘"的"Del"键,成功发送"Ctrl+Alt ...
- Android测试框架2(非原创)
package com.example.sqlitedatabase.test; import android.content.ContentValues;import android.databas ...