首页 > 其他分享 > 最大子序列求和

最大子序列求和

时间:2023-07-13 20:32:33浏览次数:18  
标签:maxx right 最大 求和 sum int 序列 left

一.O(n^3)

列举起点与终点然后求每个子序列的和

for(int i=0;i<n;i++) cin>>a[i];
int left,right;
for(int i=0;i<n;i++){
    for(int j=i;j<n;j++){
        long long sum=0;
        for(int k=i,k<=j;k++){
            sum+=a[k];
        }
        if(sum>maxx){
            left=i,right=j,maxx=sum;
		} 
    }
}

二.O(n^2)

第一层循环列举起点,第二层用来求和,

for(int i=0;i<n;i++) cin>>a[i];
int maxx=0,left,right;
for(int i=0;i<n;i++){
    long long sum=0;
	for(int j=i;j<n;j++){
        sum+=a[j];
        if(sum>maxx){
            maxx=sum;
            left=i,right=j
        }
    }
}

三.O(n)

思想就是从第一个数开始相加,如果和小于零了,就舍弃该段子序列,让当前的和等于0;如果大于maxx(记录最大子序列和)就让maxx=当前的和并更新左右点(让left=m(记录起点,让right=i),值得注意得是如果小于零我们必须也要让m进行更新,让它等于和小于零的那段子序列的尾端+1,因为我们要舍去当前这段小于0的子序列,那么下一个序列的开始则为当前的i+1,特判一下就是如果m>n,那么m=n.

for(int i=1;i<=n;i++) cin>>a[i];
int left,right,maxx=INT_MIN,sum=0,m=1;//左边界,右边界,子序列最大值,当前和,记录起点。
for(int i=1;i<=n;i++){
    sum+=a[i];
    if(sum>maxx){
        maxx=sum;
        left=m,right=i;
    }
    if(sum<0){
        sum=0;
        m=i+1;
        if(m>n) m=n;
    }
}

标签:maxx,right,最大,求和,sum,int,序列,left
From: https://blog.51cto.com/u_16085557/6715836

相关文章

  • jboss JMXInvokerServlet反序列化漏洞
    jmxinvokerservlet反序列化漏洞描述:JBOSS在/invoker/jmxinvokerservlet请求中读取了用户传入的对象,可利用apachecommonscollections中的gadget执行任意代码CommonCollectionGadget主要是由ConstantTransformer,InvokerTransformer,ChainedTransformer构成。gadget主要通过Transfor......
  • 在Unity3D中使用ScriptableObject进行序列化
    ScriptableObject类型经常用于存储一些unity3d本身不可以打包的一些object,比如字符串,一些类对象等。用这个类型的子类型,则可以用BuildPipeline打包成assetbundle包供后续使用,非常方便。这样除了playerpref和c#文件读取外,另外的一种存取一些数据对象的方法1.usingUnityEngine;......
  • m完整的SC-FDE单载波频域均衡通信链路matlab仿真,包括UW序列,QPSK,定时同步,载波同步,
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要        完整的SC-FDE单载波频域均衡通信链路的设计和实现,包括UW序列的设计、QPSK调制、帧同步、定时同步、载波同步、SNR估计和MMSE信道估计等环节。本文首先介绍了SC-FDE通信系统的基本......
  • consul 使用总结 & Nginx 负责均衡,最大连接数据,超时次数,超时等待时间,权重
    consul使用总结&Nginx负责均衡,最大连接数据,超时次数,超时等待时间,权重consulagnet-dev启动consul启动服务,注册服务:dotnetOrderServer.dll--urls="http://:5189"--ip="127.0.0.1“--port=5189dotnetOrderServer.dll--urls="http://:5188"--ip="127.0.0......
  • 3.3_转换与处理时间序列数据
    pandas时间相关的类类名称说明Timestamp最基础的时间类。表示某个时间点。在绝大多数的场景中时间数据都是以Timestamp形式的时间Period表示单个时间跨度,或者某个时间段,例如某一天,某一小时等。Timedelta表示不同单位的时间,例如1天,1.5小时,3分钟,4秒等,而非具体的......
  • Java反序列化:URLDNS的反序列化调试分析
    URLDNS链子是Java反序列化分析的第0课,网上也有很多优质的分析文章。笔者作为Java安全初学者,也从0到1调试了一遍,现在给出调试笔记。一.Java反序列化前置知识Java原生链序列化:利用Java.io.ObjectInputStream对象输出流的writerObject方法实现Serializable接口,将对象转化成字节......
  • ITK 最大圆度连通域提取
    最大圆度概念:圆度计算(Circularity,Roundness)1Roundness=(4*CV_PI*Area)/(Perimeter*Perimeter)2doublegetRoundness(std::vector<cv::Point>contour)3{4doublefactor=(cv::contourArea(contour)*4*CV_PI)/(pow(cv::arcLength(contour,true......
  • 求js数组最大值
    1letarr=[1,2,3,4,5]23letmax=arr.reduce((prev,cur)=>{4returnMath.max(prev,cur)5})67console.log(max)//expectedoutput:5 //找出数组中最大/小的数字constnumbers=[5,6,2,3,7];//使用Math.min/Math.max以及apply函数......
  • 解决redis hash序列化报错的具体操作步骤
    RedisHash序列化报错的解决方法1.问题背景在使用Redis时,有时候会遇到Hash序列化报错的问题。这种问题通常是由于Redis中存储的数据类型与操作的数据类型不一致导致的。在下面的文章中,我将为你详细介绍解决这个问题的步骤和相应的代码示例。2.解决步骤步骤操作1.查......
  • 序列
    数据库模式对象序列开发中最重要,序列(sequence)是序列号的生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。创建序列需要createsequence权限。序列......