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


相关推荐

  • 1146 Topological Order「建议收藏」

    1146 Topological Order「建议收藏」题目题意:在给定有向图中,对于给定查询序列是否是有向图中的一个拓扑序列,记录非法序列下标tip:模拟拓扑排序#include<iostream>#include<vector>usingnamespacestd;intin_num[1003]={0};inttemp[1003]={0};vector<int>s[1003…

    2022年6月3日
    34
  • arm Linux_arch linux

    arm Linux_arch linux/* * __flush_dcache_all()* FlushthewholeD-cache. * Corruptedregisters:x0-x7,x9-x11 */ENTRY(__flush_dcache_all)//保证之前的访存指令的顺序   dsbsy                 //读cachelevelidregi

    2022年10月8日
    6
  • docker部署jenkins安装使用教程_docker搭建python开发环境

    docker部署jenkins安装使用教程_docker搭建python开发环境前言使用docker安装jenkins环境,jenkins构建的workspace目录默认是在容器里面构建的,如果我们想执行python3的代码,需进容器内部安装python3的环境。进jenki

    2022年7月31日
    7
  • 什么是跨域问题?跨域解决问题

    什么是跨域问题?跨域解决问题一 为什么会出现跨域问题 出于浏览器的同源策略限制 同源策略是一种约定 它是浏览器最核心也是最基本的安全功能 如果缺少了同源策略 则浏览器的正常的功能可能会受到影响 跨域收是 Web 是构建在同源策略基础上的 浏览器只是针对同源策略的一种实现 同源策略会阻止一个域的 JavaScript 脚本和另一个域的内容进行交互 所谓同源 即指同一个域 就是两个页面具备同样的协议 protocol 主机 host 和端口号 port 跨域报错的原因请求是跨域的 并不一定会报错 普通的图片请求 css 文件请求是不

    2025年6月12日
    4
  • C++ vector初始化_vector初始化大小

    C++ vector初始化_vector初始化大小一维向量vector<int>vector_1D_1;//只定义向量vector<int>vector_1D_2(n);//定义的同时初始化大小vector<int>vector_1D_3(n,m);//定义的同时初始化大小为n,元素初始值为m//先定义变量,再初始化大小和初值vector<int>vector_1D_4;vector_1D_4=vector<int>(n,m);二维向量vector<vector&

    2026年1月18日
    4
  • ViewGroup的LayoutParams理解[通俗易懂]

    ViewGroup的LayoutParams理解[通俗易懂]LayoutParams是ViewGroup的一个内部类,声明方式如下publicstaticclassLayoutParams{publicstaticfinalintMATCH_PARENT=-1;publicstaticfinalintWRAP_CONTENT=-2;publicintwidth;publicintheight;

    2025年11月27日
    4

发表回复

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

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