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    

    三、运行结果截图:

  • 相关阅读:
    python
    Yii框架的学习指南(策码秀才篇)1-1 如何认识Yii framework
    yii执行流程简单介绍
    html5页面编码如何确定
    防止表单重复提交的几种策略
    2维数组排序
    YII框架开发一个项目的通用目录结构:
    phpcms添加图片投票
    windows下面apache配置虚拟目录(测试使用,发布网站不建议目录访问)
    js获取浏览器的版本代码
  • 原文地址:https://www.cnblogs.com/zhaochenguang/p/8299246.html
Copyright © 2011-2022 走看看