我在測試過這個問題就來了,減少陣列。通過添加元素
給定一個陣列,所述陣列減少以最小的成本的單個元素。爲了減少,從數組中刪除兩個元素,添加這兩個數字並將總和保留在數組中。每個操作的成本是該步驟中刪除的元素的總和。
實施例,讓陣列A = [1,2,3]
然後,我們可以除去圖1和2中,添加它們兩者,並保持之和回陣列。此步驟的成本將是(1 + 2)= 3
所以A = [3,3],成本= 3
在第二步驟中,我們可以刪除從數組兩個元件和保持的總和重新排列。此步驟的成本將是3 + 3 = 6。
所以,A = [6],成本= 6
所以總成本原來是9(6 + 3)。
我試圖排序陣列,以及從降低增加添加元素,但如果有重複的元素失敗。我的算法
sort(Array)
cost = 0
for(i=0; i<Array.length - 1; i++) {
Array[i+1] = Array[i] + Array[i+1]
cost = cost + Array[i+1]
}
上述算法的
僞代碼不能正常工作。我想出了一個可能會失敗的例子。 根據上述算法,如果Array = [5,5,5,5],則Cost = 45。
但是,如果我們總結前兩個元素和最後兩個元素,然後求和其餘兩個元素,那麼總成本結果是40.(第一步,成本= 10 * 2,並在下一步另外20)
這可能是一個高效的算法呢?
我認爲總是添加兩個最小的元素應該工作。你在做這個嗎?請顯示您正在使用的確切算法。當你將數字加回到數組中時,你把它放在前面,後面還是它所屬的位置w.r.t.排序? –
我編輯了這個問題。我將這個總和保存回前面的數組中(用總和替換其中一個元素)。我認爲把這筆錢保存在適當的地方w.r.t.排序會花費一點時間,因爲我需要在每次更換後執行此操作。 – AnkitAti
也許你應該把這些元素放在堆或二叉搜索樹中?然後每次只花費O(logn)檢索兩個最小的元素。 –