「每天兩道算法題」(最小子數組和最大子數組差)

44. 最小子數組:

給定一個整數數組,找到一個具有最小和的子數組。返回其最小和。

樣例:

給出數組[1, -1, -2, 1],返回 -3

這裡需要注意的是“子數組”,一開始沒注意到子數組,以為直接將其中的負數相加就可以了。結果就出現了例如當數組是[-5,3,-9]的時候輸出的結果是-14。真正答案是-9的尷尬。

所以這裡有一個很關鍵的地方,在於子數組應該是連續的;

「每天兩道算法題」(最小子數組和最大子數組差)

45. 最大子數組差:

給定一個整數數組,找出兩個不重疊的子數組A和B,使兩個子數組和的差的絕對值|SUM(A) - SUM(B)|最大。

返回這個最大的差值。

樣例:

給出數組[1, 2, -3, 1],返回 6

解題思路:

要使絕對值差最大,則一定是Amax-Bmin,或者Bmax-Amin,因此求出A、B子串的局部和的最大最小值,然後取差值最大的。

「每天兩道算法題」(最小子數組和最大子數組差)

「每天兩道算法題」(最小子數組和最大子數組差)


分享到:


相關文章: