码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-03-25 00:52:33      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:print   ring   class   []   exti   import   sys   col   ted   

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

我的处理方法:新建一个二倍原数组长度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);
        
    }
}
        

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

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

标签:print   ring   class   []   exti   import   sys   col   ted   

原文地址:https://www.cnblogs.com/jmdd/p/10591284.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!