《github一天一道算法题》:分治法求数组最大连续子序列和「建议收藏」

《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一天一道算法题》:分治法求数组最大连续子序列和「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115874.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 二叉树层序遍历Java版

    二叉树层序遍历Java版publicList<List<Integer>>levelOrder(TreeNoderoot){List<List<Integer>>result=newArrayList<>();if(root==null)returnresult;List<TreeNode>queue=newArrayList<>();queue.add(root);

    2022年5月21日
    34
  • onedrive免费扩容25t_onedrive怎么免费扩容1T

    onedrive免费扩容25t_onedrive怎么免费扩容1TOneDrive存储我们都知道没有开office365,自己onedrive的储存空间只有5GB,onenote做笔记以及用onedrive同步文档空间不够,但是又不想开office365;所以在网上看到别人说onedrive可以推荐别人注册,可以扩容10GB;加起来一共15GB,用来做笔记完全够用;或许有大佬会说可以弄到Office教育版的微软账号,有5T或1T的存储空间,但是这个会涉及到账号里面文档的安全性,这种账号是属于教育机构的,全局管理员可以有权查看里面储存的文件并且有权删去账号,这样的

    2025年10月17日
    2
  • 教你如何暴力破解wifii密码

    使用kalilinux系统进行wifi暴力破解获取密码注意:私自破解他人WiFi属于违法行为,本教程仅供学习与参考。破解工具破解工具:kalilinux系统 ,本教程使用的装在物理机的linux系统(虚拟机使用方法一样)。支持监听模式的无线网卡,本教材使用的是某宝购买的3070L网卡。字典文件(如果你没有字典也没有问题后面会教你如何使用cruncl创建密码文件)。…

    2022年4月8日
    79
  • 语雀—好用的文档编写、知识沉淀的工具

    发现一个好用的文档编写、知识沉淀的工具——语雀。语雀—好用的文档编写、知识沉淀的工具简单介绍「语雀」是一个「专业的云端知识库」,孵化自 蚂蚁金服,是 体验科技]理念下的一款创新产品,已是 10 万阿里员工进行文档编写、知识沉淀的标配。语雀诞生伊始,只是希望能给工程师提供一个好用的工具用来写技术文档,达成「用 Markdown 写文档」这个小目标。但在产品研发的过程中,我们发现其实身边的…

    2022年2月28日
    78
  • 获取资源文件地址getClassLoader[通俗易懂]

    获取资源文件地址getClassLoader[通俗易懂]this.class.getClassLoader().getResourceAsStream与this.class.getResourceAsStream本文转自:http://xixinfei.iteye.com/blog/1256291this.getClass().getClassLoader().getResource("template");   首先,调用对象的getClass()方…

    2022年5月4日
    57
  • dw8制作html手机兼容视频,Dreamweaver8在网页中插入Flash视频

    dw8制作html手机兼容视频,Dreamweaver8在网页中插入Flash视频在Dreamweaver的“文档”窗口中打开index.html页面,插入一个三列的表格,在由三列组成的表格的中间一列中放置的图形之上单击一次。选择“插入”>“媒体”>“Flash视频”。在“插入Flash视频”对话框中,从“视频类型”弹出式菜单中选择“渐进式下载视频”。关于…关于Flash视频使用Dreamweaver中的“插入Flash视频”命令,可将…

    2022年8月30日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号