• 返回一个整数数组中最大子数组的和。


    题目:返回一个整数数组中最大子数组的和。

     

    要求: 输入一个整型数组,数组里有正数也有负数;

              数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;

              求所有子数组的和的最大值。要求时间复杂度为O(n);

    一、设计思想

    1.首先随机产生一个数组,数组长度可自行输入,该数组里有正数也有负数。

    2.从数组中第一个元素a[0]开始,依次计算a[0]、a[0]+a[1]、a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值。

    3.再从数组第二个元素a[1]开始,依次往后计算每个子数组的和,取出最大值。

    4.依次循环,循环num次,直到数组最后一个元素,将每次求得的最大值存到一个数组list[]中。

    5.比较每次得出的子数组的和的最大值,再得出最大值。

    二、源程序

     1 //作者:王雪青   陆宇

     2 //日期:2015年3月18日

     3 package com.java.lianxi;

     4

     5 import java.util.*;

     6 public class lianxi2

     7 {

     8     public static void main(String[] args)

     9     {

    10         Scanner input=new Scanner(System.in);

    11         System.out.print("请输入数组中数的个数:");

    12         int num=input.nextInt();

    13         int array[]=new int[num];

    14         for(int i=0;i<num;i++)

    15         {

    16             if((int)(Math.random()*2)==0)

    17             {

    18                 array[i]=(int)(Math.random()*10);

    19             }

    20             else

    21             {

    22                 array[i]=-(int)(Math.random()*10);

    23             }

    24         }

    25         for(int i=0;i<num;i++)

    26         {

    27             System.out.println(array[i]);

    28         }

    29         int max=0;

    30         int list[]=new int[num];

    31         for(int j=0;j<num;j++)

    32         {

    33             max=array[j];

    34             int sum=0;

    35             for(int t=j;t<num;t++)

    36             {

    37                 sum=sum+array[t];

    38                 if(sum>max)

    39                 {

    40                     max=sum;

    41                 }

    42             }

    43             list[j]=max;

    44         }

    45         for(int i=0;i<num;i++)

    46         {

    47             System.out.print("第"+(i+1)+"次比较的子数组的和的最大值为:");

    48             System.out.println(list[i]);

    49         }

    50         for(int i=1;i<num;i++)

    51         {

    52             max=list[0];

    53             if(list[i]>max)

    54             {

    55                 max=list[i];

    56             }

    57         }

    58         System.out.print("子数组和的最大值为:"+max);

    59     }

    60 }

    61    

    三、运行结果截图:

  • 相关阅读:
    微信小程序之坑(一) JESSIONID一直变动问题
    spring 异常org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result: 2
    springdatajpa之坑(一)
    AOP实战
    spingboot pom文件 打成war 包 热部署 引入第三方jar包
    javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session 解决办法
    判断请求来自手机还是PC
    存储过程
    jfinal 连接oracle 数据库把外键当成主键 在mappingkit文件里生成多个主键解决办法
    oracle 回复以前的数据
  • 原文地址:https://www.cnblogs.com/zhaochenguang/p/8299246.html
Copyright © 2020-2023  润新知