课程练习的设计过程

  在新的软件工程课堂上,老师留了一个课堂练习小题。

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

  要求:(1)输入一个整形数组,数组里有正数,也有负数。

           (2)数组中连续的一个或多个整数组成了一个子数组,每个子数组都有一个和。

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

  设计思路:假设存在一个整形数组,长度为n,其中数组中既有正数,也有度数。

首先遍历一遍整个数组,找出数组中所有的负数,并将每两个相邻的负数间的所有正数数组记为i[1],i[2],i[3]……

则整个数组就变为i[1]  a1  i[2]  a2  i[3]  a3……(其中a代表所有负数)。

第二步,找出所有正数数组中和最大的数组i[m]。

第三步,整个数组就像这样…… i[m-1]  a(m-1)     i[m] am i[m+1]………记k=i[m]分别求出k(1)=i[m]+a(m-1)+i[m-1]

k(2)=i[m]+a(m-1)+i[m-1]+a(m-2)+i[m-2]一直向i[m]前面相加。最后在k,k(1),k(2)……中取出最大值k(m)。

第四步,以相同的方法将i[m]后面的最大值求出来,记为l(n)。

则整个数组的最大数组的和就是k(m)+l(n),最大值的数组就是其对应的数组。

 

posted @ 2018-10-07 19:30  皇后大道东  阅读(116)  评论(1编辑  收藏  举报