个人作业之最大子数组

题目:返回一个整数数组中最大子数组的和。
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O()

发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选)、源代码、结果截图、总结。

 

1>设计思想

1.首先定义循环,输入要处理的数组a[5];

2.定义一个整型数b,初始化为0,和求最大子数组的sum,初始化为0,然后设置循环,每进行一次循环,b等于b加上a[i],如果sum小于b,sum

等于b ,如果b小于0,b就等于下一个数。

3.最后输出sum

 

2>出现的问题

如果输入的都是负数,结果为0

3>解决方案

将b初始化为a[0]

 

4>源代码

import java.util.*;

/*

求最大子数组问题

要求数组中有正也有负数,如果全为负数,只需要找出

最大的负数即可。

*/

public class Shuzuhe {

         public static void main(String[] args){

                   Scanner sc=new Scanner(System.in); //可以读出输入的数

                  

                   int a[]=new int[5];//定义一个长为5 的数组,作为输入数组

                  

                   System.out.println("请输入要进行处理的数(5个):");

                   for(int i=0;i<5;i++)//输入5个数

                   {

                            a[i]=sc.nextInt();

             }

                  

                  

                   int sum=a[0];//用于记录和

                   int b=0;//用于每次运算,找最大子数组

                  

                   for(int i=0;i<5;i++)

                   {

                            if(b<0)

                            {

                                     b=a[i]; //如果b<0,将b移到加为负数那位的后一位

                            }

                            else

                            {

                                     b+=a[i];

                            }

                           

                            if(sum<b)

                            {

                                     sum=b; //sum为当前最大子数组的和

                            }

                   }

                   System.out.print("最大子数组为:");

                   System.out.print(sum);

         }

}

 

4>结果截图

5>总结

这次没注意到将b初始化为a[0],所以造成全是负数时,结果为0

posted on 2016-04-07 16:28  那年夏天123  阅读(156)  评论(0编辑  收藏  举报

导航