2013-06-12 18 views
-1

說我有一個整數這個名單:如何填補空白整數序列,通過選擇最佳的互補序列

列表A = 3 5 9 10 11 15

說我有其他幾個列表整數:

列表B1 = 1 2 3 4 5 6 7 8 20 25

列表B2 = 4 7 8 13 17

列表B3 = 10 11 12 13 14 15 16 17

NB:

  • 在A,4是一個間隙(同上6,7,8,12,13,14)
  • 在B1,1,2,20和25是脂肪:多餘的,因爲不如分在A或優於一

最大請問有什麼算法:

  1. 告知用戶,如果A B列表填充所有在列表中的缺口 - 與否;
  2. (如果有些差距不填寫)告訴其中B名單填補國內空白的名單填充間隙最好 =最高數和最低數量的脂肪

我想這是一個經典的需要。 ..

PS:我喜歡的.py代碼,但僞代碼是確定

非常感謝

+0

你嘗試過什麼到目前爲止? –

+0

還沒有,因爲我不想推倒重來。 – user2479920

+1

然後做自己的研究 –

回答

0

我會使用過A和B在A中的第一迭代和第二過B的排序陣列兩個迭代每當有所述的下一個編號B中的間隙必須填充它。像這樣(在C#示例):

var iterA = A.Sort().GetEnumerator(); 
var iterB = B.Sort().GetEnumerator(); 

iterA.MoveNext(); iterB.MoveNext(); 
var prevA = iterA.Current; 
var curB = iterB.Current; 

if (curB < prevA) return "B is fat"; 

while (iterA.MoveNext()) { 
    var curA = iterA.Current; 
    if (curA - prevA == 1) { 
    prevA = curA; 
    continue; // no gap 
    } 
    while (curA - prevA > 1) { 
    if (curB != prevA + 1) return "B does not fill gap"; 
    if (iterB.MoveNext()) { 
     curB = iterB.Current; 
     prevA++; 
    } else return "B does not fill gap"; 
    } 
    prevA = curA; 
} 

運行時的複雜性將是線性O(N)其中N是分(A)和max(A)之間的數字。這只是給你一個關於如何解決這個問題的想法的例子。我不保證這個算法的正確性,我沒有編譯或測試它。我不知道蟒蛇,但我認爲它確實提供了類似於C#的迭代器的東西。

0

以下步驟將做

1) Store the gaps of A, in an array. 
2) Then Map each element of A With different B(B1,B2,..) 
3) And then display the result, based on the result in the above step 

這是一個強力的方法來解決這個問題。