2016-03-31 30 views
1

問題是要求採取任何數量的數字,並找出連續數字之間的差異(使用絕對值)的最高可能總和。例如,數字1 2和3將被安排3 1 2以得到3的總和(3-1 = 2,並且1-2 = 1)。需要一些簡單的邏輯幫助,困住了幾個小時

現在我的第一個想法是採取列表中最高的數字,然後是最低的數字,並以這種方式進行排列,但這並不奏效,因爲列表的末尾將會包含所有數字在中間積累幾乎沒有差異。我唯一想到的其他事情是找到每一個可能的順序並返回最高金額,但是如果列表較長,這將會花費太長時間,我認爲可能有更好的方法。

僅供參考這裏有一些樣品的輸入和輸出數字

9 2 5 3 1 -> 21 
7 3 4 5 5 7 6 8 5 4 -> 24 

任何幫助都將不勝感激,哪怕它只是指着我正確的方向。

+1

你怎麼'21'的'9 2 5 3 1'?它不應該是'14'嗎? – Haris

+0

@Haris:重新排列爲「2 9 1 5 3」,差異7 + 8 + 4 + 2 = 21. –

+0

@Meehm,好的。我以爲他給了重新安排的一個。 – Haris

回答

3

有兩種解決此問題的方法。

方法1:

蠻力。

方法2:

圖出來如何安排數的算法。

如果可行,我總是喜歡方法2。

這似乎是合理的,如果您訂購的數字高 - 低 - 高 - 低 - 高...

通過排序號碼,以便開始,然後把它們分成兩個同樣大的羣體,你會得到一個高總和低數量和高數量。如果有一個奇數的號碼,中間的號碼將被留下。

然後你只需從兩組中選擇數字。

只要堅持高 - 低 - 高 - 低排序,很容易證明內部數字的順序無關緊要。 但是,由於開始和結束號碼只有一個鄰居,所以第一個和最後一個號碼應該是中間的號碼。

最後,如果您有奇數個數字,請將最後一個數字放在開頭或結尾處,無論給出最大差異。

例子:

7 3 4 5 5 7 6 8 5 4 -> [sort] -> 3 4 4 5 5 5 6 7 7 8 
high numbers: 5 6 7 7 8 
low numbers: 3 4 4 5 5 

Arranged: 
5 3 6 4 7 4 7 5 8 5 = 24 

例子:

9 2 5 3 1 -> [sort] -> 1 2 3 5 9 
high numbers: 5 9 
low numbers: 1 2 
left over: 3 

Arranged: 
3 5 1 9 2 = 21  (3 goes at the start, because |3-5| > |3-2|) 
+0

非常感謝,這有助於一噸。 – kidchicken