1. 程式人生 > >課程練習的設計過程

課程練習的設計過程

負數 老師 也有 大數 n) 正數 數組 成了 軟件

在新的軟件工程課堂上,老師留了一個課堂練習小題。

問題描述:返回一個整數數組中最大子數組的和。

要求:(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),最大值的數組就是其對應的數組。

課程練習的設計過程