有一個包含(正數和負數)整數的數組A
。查找(連續)子數組的元素絕對總和最小的,例如:找到子陣列的最小絕對總和
A = [2, -4, 6, -3, 9]
|(−4) + 6 + (−3)| = 1 <- minimal absolute sum
我已經通過實施蠻力算法,這是O(N^2)
或O(N^3)
開始,但它產生正確的結果。但任務規定:
complexity:
- expected worst-case time complexity is O(N*log(N))
- expected worst-case space complexity is O(N)
一些搜索我想,也許Kadane的算法可以被修改,以適應這個問題,但我沒能做到這一點之後。
我的問題是 - 卡丹的算法是否正確?如果不是的話,你能否指出我的方向是正確的(或者說一個能夠幫助我的算法)?我不想要一個現成的代碼,我只需要幫助找到正確的算法。
我不關注如何識別部分和的子數組。例如數組[-4,5,-1]有部分和[-4,1,0],這似乎意味着子數組應該是[5,-1] = 4,而實際的解決方案是[-4,5,-1] = 0。 – Benubird 2015-06-11 12:55:29
我沒有考慮整個陣列,被認爲是一個子陣列。您可以分別考慮具有小部分和的子數組,或者在排序所有內容時確保包含具有零元素的子數組 - 這有一個零和,因此在您的示例中,您將得到部分和[-4, 1,0,0],然後找出解決方案,該解決方案考慮到兩個零和相加的項之間的跨度 - 整個陣列的開始和結束。從兩個部分總和中識別出來的子陣列是部分總和中的項目集合,其中大部分項目相加但不在另一個項目中。 – mcdowella 2015-06-11 18:00:52
考慮3,3,3,4,5?也許我很困惑。 – Catalyst 2015-12-14 18:41:50