zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和。

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

     

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

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

              求所有子数组的和的最大值。要求时间复杂度为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    

    三、运行结果截图:

  • 相关阅读:
    mysql完全卸载教程(图文详细)
    windows:安装django
    01 Java的NIO三大组件以及buffer的原理以及应用
    16 JDK8的concurrenthashmap的原理介绍
    07 Java源码字节码层面简单分析
    06 Java字节码的基础知识
    05 Java的class文件的组成介绍
    04 G1垃圾回收器的介绍以及垃圾回收调优的基础知识和简单案例
    03 JVM中垃圾回收算法以及典型的垃圾回收器
    02 Java的引用类型以及应用场景
  • 原文地址:https://www.cnblogs.com/zhaochenguang/p/8299246.html
Copyright © 2011-2022 走看看