zoukankan      html  css  js  c++  java
  • 课堂练习--最大子数组和

    设计思想:

    1、setArray()函数实现数组的输入 此处定义数组长度为10

    2、ArrayMax()函数实现求最大子数组的和。应为复杂度为O(n),首先 输入一个数组 如:

     -1 2 -1 -2 5 4 3 -6 8 9 

    先定义一个新的数组cArray[],长度为11.然后初始化cArray[1]为0;for循环中 有

    cArray[i+1] = cArray[i]+array[i];

    所以新的数组为 :

    0 -1 2 1 -1...

    因为求最大值,所以判断当cArray[]小于0时,将5 赋值给新数组

    即为:

    0 -1 2 1 -1 5 9 12 6...

    最后在得到的新数组中求出最大的值 此时这个值为最大的子数组和。

    源代码:

     1 import java.util.Scanner;
     2 public class Array {
     3 
     4     public static void main(String[] args) {
     5         // TODO Auto-generated method stub
     6         Max m = new Max();
     7         m.setArray();
     8         m.ArrayMax();
     9     }
    10 
    11 }
    12 class Max
    13 {
    14     int array[];
    15     int cArray[];
    16     int max;
    17     int i;
    18     int m;
    19     void setArray()//输入数组
    20     {
    21         System.out.println("Please input your array length = 10");
    22         array = new int [10];
    23         Scanner s = new Scanner(System.in);
    24         for(int i=0;i<10;i++)
    25         {
    26             array[i]=s.nextInt();
    27         }
    28     }
    29 
    30     void ArrayMax()//输出最大值
    31     {
    32         cArray = new int [11];
    33         cArray[0] = 0;
    34         for(i=0;i<10;i++)
    35         {
    36             cArray[i+1] = cArray[i]+array[i];                    
    37             if(cArray[i+1]<0)
    38             {
    39                 cArray[i+2]=array[i+1];
    40             }
    41         }
    42         //在数组中得到最大值
    43         for(i=1;i<10;i++)
    44         {
    45             if(cArray[i+1]>=cArray[i])
    46             {
    47                 max = cArray[i+1];
    48             }
    49             else if(cArray[i+1]<cArray[i])
    50             {
    51                 m = cArray[i];
    52                 cArray[i]=cArray[i+1];
    53                 cArray[i+1]=m;
    54                 max = cArray[i+1];
    55             }
    56         }
    57         System.out.println("max is "+max);
    58     }
    59 }

    结果截图:

    总结:

    进行求最大值时,若大于0 相加则变大 反之变小。

  • 相关阅读:
    centos8网络连接(1)虚拟机网卡和网络编辑器设置
    centos7离线安装ruby
    centos7安装ruby-2.6.5,简单快捷的下载与安装方式
    redis 4.0.13 -- 集群模式
    活了
    世界无我
    markdown_test
    关于mimikatz在webshell运行
    可用性自动化V3
    关于sqlmap常用
  • 原文地址:https://www.cnblogs.com/hzxsg0919/p/5368897.html
Copyright © 2011-2022 走看看