求环形连续子数组的和的最大值

Posted jmdd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求环形连续子数组的和的最大值相关的知识,希望对你有一定的参考价值。

课上老师把连续子数组求和的题目改为让子数组首尾相接再求最大子数组的和。

我的处理方法:新建一个二倍原数组长度b的数组d[  ],然后从d[0]到d[b]分别生成b个分数组,再分别求子数组和,再比较。

package wodeshiyao;

import java.util.Scanner;


public class shiyan321 {
    static Scanner scan=new Scanner(System.in);
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int b;    //数组长度
        System.out.println("请输入数组长度:");
        b=scan.nextInt();
        int c[]=new int [b];//定义规定长度的整型数组
        System.out.println("请输入数组元素:");
        for(int i=0;i<b;i++)
        {
            c[i]=scan.nextInt();    //a[]是原数组
        }
        
    int d[]=new int [2*b-1]; //d[]是双倍数组
    for(int p=0;p<b;p++){
        d[p+b]=d[p];
    }
    int l,n;
    int e[]=new int [b];    //e[]是最大值数组和
    int f[]=new int [b];    //存放当前分数组的值
    for(l=0;l<b;l++)//第l号数组
    {    
        
        for(n=0;n<b;n++)    //确定分数组 
            {f[n]=d[l+n];}
        
        int i,j,k;
        int max[]=new int [b];
        for(i=0;i<b;i++){
            max[i]=f[i];
            k=f[i];
            for(j=i+1;j<b;j++){
                k=k+f[j];
                if(k>max[i])
                {max[i]=k;}
            }
        }
        
        //选最大数组和
        int m=max[0];
        for(i=1;i<b;i++)
        {
            if(max[i]>m)
            {m=max[i];}
        }
        e[l]=m;
    }
    int m=e[0];
    int i;
    for(i=1;i<b;i++)
    {
        if(e[i]>m)
        {m=e[i];}
    }
        
        System.out.println("所有连续子数组和的最大值为:"+m);
        
    }
}
        

但是我的代码还存在错误,改正后再发。

以上是关于求环形连续子数组的和的最大值的主要内容,如果未能解决你的问题,请参考以下文章

数组连续最大子和及环形数组最大子和

查找环形数组的和最大的连续子数组

环形数组最大子数组之和

环形数组最大子数组之和

返回一个整数数组中最大子数组的和(然后就是一个环形数组的相关的操作)

关于求已知整数数组的连续子数组的最大和的方法