zoukankan      html  css  js  c++  java
  • 求数组最大子数组的和(循环数组)

      这次课上,把求最大子数组的问题进行了拓展,想象原始数组是一个像手环一样首位相连的结构,求最大子数组的和。我们知道,在中学的时候,涉及环状,包括圆柱体,圆锥体我们都会把它剪开,化简为平面问题。我想环状数组也可以这样来简化。

      例如原始数组为 1 2 3 ,我们可以从3处剪开,再添上前面的两个数,变成 1 2 3 1 2,这样就可以在一维数组中求解。

      上次的代码可以复制过来用,只需要修改几个地方即可:1.添加新的数组,用来存储环状数组变化成一维数组后的值 2.修改子数组个数为 i 方 3.第二次for循环条件的修改,保证环状数组每个元素的子数组都可取到最大。

      

     1 package zuoye3;
     2 
     3 import java.util.Scanner;
     4 
     5 public class xunhuan {
     6 
     7     public static void main(String[] args) {
     8         // TODO 自动生成的方法存根
     9         int i,j;
    10         int sum=0;
    11         int count=1;//子数组下标单位
    12         int max;
    13         Scanner scan=new Scanner(System.in);
    14         System.out.print("输入数组的长度:  ");
    15         i=scan.nextInt();
    16         int length=i*i;//表示子数组的个数
    17         int []a=new int[i];//定义长度为i的原始数组
    18         int []a2=new int[2*i-1];//将循环数组展开后的数组
    19         int []b=new int[length];//定义长度为length的子数组,用来存放各个子数组的和
    20         System.out.println("请依次输入数组元素");
    21         for(i=0;i<a.length;i++)
    22         {
    23             a[i]=scan.nextInt();
    24         }//输入数组元素
    25         System.out.println("原始数组为: ");
    26         for(i=0;i<a.length;i++)
    27         {
    28             System.out.print(a[i]+" ");
    29         }//
    30         
    31         for(i=0;i<a2.length ;i++)
    32         {
    33             if(i<a.length)
    34             {
    35             a2[i]=a[i];
    36             }
    37             else
    38             a2[i]=a[i-a.length];            
    39         }
    40         System.out.println(" ");
    41         System.out.println("循环数组展开为: ");
    42         
    43         for(i=0;i<a2.length;i++)
    44         {
    45             System.out.print(a2[i]+" ");
    46         }
    47         System.out.println(" ");
    48         //下面代码表示求各子数组大小的过程
    49     for(i=0;i<a.length;i++)
    50     {
    51         sum=0;
    52         for(j=i;j<i+a.length;j++)
    53         {
    54             sum+=a2[j];
    55             System.out.println("第"+count+"个子数组的和为"+sum);
    56             b[count-1]=sum;
    57             count++;
    58         }
    59     }
    60     max=b[0];
    61     for(i=0;i<b.length;i++)
    62     {
    63         if(max<b[i])
    64             max=b[i];
    65     }
    66 
    67     System.out.println("最大子数组的和为 :"+max);
    68     }
    69 
    70 }
    View Code
  • 相关阅读:
    JavaWeb_(Mybatis框架)MyBatis整合Spring框架
    JavaWeb_(Mybatis框架)MyBatis Generator简单入门
    JavaWeb_(Mybatis框架)动态sql_七
    JavaWeb_(Mybatis框架)关联查询_六
    JavaWeb_(Mybatis框架)输入和输出参数_五
    JavaWeb_(Mybatis框架)主配置文件介绍_四
    JavaWeb_(Mybatis框架)Mapper动态代理开发_三
    JavaWeb_(Mybatis框架)使用Mybatis对表进行增、删、改、查操作_二
    JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一
    JavaWeb_(SSH)三大框架整合struts+hibernate+spring_Demo
  • 原文地址:https://www.cnblogs.com/Aduorisk/p/10613849.html
Copyright © 2011-2022 走看看