《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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 理解图像中卷积操作的含义

    理解图像中卷积操作的含义原文地址:https://blog.csdn.net/chaipp0607/article/details/72236892?locationNum=9&amp;fps=1上文用生动的例子来解释卷积记载了卷积的含义,现在就来看看卷积在图像处理中的应用吧。(ps:本文大部分内容系转载大神的博客,现在csdn强制图片水印,实在感到很无奈!!!)数字图像处理中卷积数字图像是一个二维的离散信号,对…

    2022年5月28日
    42
  • springboot+Vue_从零搭建springboot项目

    springboot+Vue_从零搭建springboot项目Hello,你好呀,我是灰小猿,一个超会写bug的程序猿!利用国庆期间做了一个基于springboot+vue的前后端分离的个人博客网站,今天在这里将开发过程和大家分享一下,手把手教你搭建一个自己专属的个人博客。完整源码放置在Gitee上了,【源码链接】小伙伴们记得⭐star⭐哟!小伙伴们一键三连➕关注!灰小猿带你上高速啦????????????!先看一下博客网站的演示视频:⚡项目目录⚡个人博客网站项目整体思路Java后端接口开发(1)数据库设计​(2)整合My

    2022年9月30日
    0
  • 字符串放到数组里面_shell dash使用数组

    字符串放到数组里面_shell dash使用数组先引用一段资料,出自:http://bbs.chinaunix.net/thread-4125147-1-1.html红色注释为个人添加————————————————————–搬运内容分割线———————————————————–

    2025年7月17日
    0
  • git的一个分支在本地修改了很多,怎么能直接将本地的直接push到git的另外一个分支呢

    git的一个分支在本地修改了很多,怎么能直接将本地的直接push到git的另外一个分支呢

    2021年7月17日
    67
  • 客观赋权法——变异系数法

    客观赋权法——变异系数法一、变异系数法的概念变异系数法是根据统计学方法计算得出系统各指标变化程度的方法,是一种客观赋权法。根据该方法变化差异较大的指标权重较大,变化差异较小的指标权重较小,从而根据指标的统计学规律确定其重要程度。变异系数法是一种较为客观的方法,能够客观的反应指标数据的变化信息,该方法能够比较客观的求出各指标的权重。根据各评价指标当前值与目标值的变异程度来对各指标进行赋权,当各指标现有值与目标值差距较大时,说明该指标较难实现目标值,应该赋予较大的权重,反之则应该赋予较小的权重。二、变异系数法的步骤(1)原

    2022年4月28日
    79
  • python自学笔记(一)

    python自学笔记(一)我没学过python,通过网上和一些图书资料,自学并且记下笔记。很多细节留作以后自己做项目时再研究,这样能更高效一些。python基础自学笔记一、基本输入和输出pthon3.0用input提示

    2022年7月5日
    21

发表回复

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

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