2011-09-17 46 views
0

可能重複:
Finding three elements in an array whose sum is closest to an given number您將得到一個整數數組,A1,A2,...,一個

現在給你一個整數數組,A1,A2, ...,An,包括負數和正數,以及另一個整數S.現在我們需要在數組中找到三個不同的整數,其總和最接近於給定的整數S.如果存在多個解,則它們中的任何一個都是好。有沒有一種算法可以在O(n^2)時間內找到三個整數?

+7

給予我們了嗎?就我個人而言,我不覺得我有任何陣列。我以爲你給了這個整數數組。 –

+0

似乎是功課。你到目前爲止有什麼? –

+3

可以問一下關於算法的問題,並詢問有關家庭作業的內容(當你對此坦誠時,這裏的人更喜歡),但將你的問題標記爲「visual-C++」,好像有人會給你一個帶有思想的Visual-C++程序您目前投入的問題很荒唐。 –

回答

4

是的。你想找到a,b,c和a + b + c儘可能接近s。

  1. 按遞增順序排列數字。

  2. 嘗試每個a值。對於每個a值,執行以下步驟:

  3. 以b =最小(第一個)數字和c =最大(最後)數字開始。如果這使得+ b + c更接近於s,則逐步降低c。

  4. 然後逐步增加b,每次增加b時,如果使+ b + c更接近s,則逐步降低c。

+2

我不認爲這會適用於所有情況。差異可以是正面的也可以是負面的(還有要添加的數字 - 但這與我的反對意見無關)。所以,雖然減少C可能會讓你更接近於預期總和的絕對差距,但可能會在增加B之後再次增加C以更加接近。 – Lucero

+0

@Lucero:該方法是正確的。如果b1 <= b2且c1是b1的最佳c,而c2是b2的最佳c,則c2 <= c1。 – user763305