2015-05-28 60 views
2

我面臨一個非常困難的情況,假設我有一個動態數字數組。條件是該數組可能包含10個數字到20個數字。它可以包含10,12,14,...到20個整數。現在基於ArrayList.Count(),我將從該數組中選擇3(如果數組包含10個整數)到6(如果數組包含20個整數),並添加這些數字。說這個數字是「X」。從動態數組中找到整數的唯一總和

現在我要檢查列表中是否存在任何三個整數,其總和等於X,如果其相等,則我必須重複相同的過程,直到我從列表中找到唯一的總和。

那麼我該怎麼做呢?最好的部分是數組中的所有數字都是唯一的,數組中沒有重複的數字。

一是理念

我雖然一個想法,爲3個數字,假設我生成一個唯一的號碼。

foreach (var i in List) // values of i = 1, 5, 8 (Assume) 
{ 
    sum += listOfUniqueIntegers[i]; 
} 

//固定第一元件作爲列表[I]

for (int i = 0; i < List.Count()-2; i++) 
{ 
    // Fix the second element as List[j] 
    for (int j = i+1; j < List.Count()-1; j++) 
    { 
     // Now look for the third number 
     for (int k = j+1; k < List.Count(); k++) 
     { 
      if (List[i] + List[j] + List[k] == sum) 
      { 
      // Here I will again create one more unique value 
      // and assign it to sum and repeat i = 0, j = 0, k = 0; 

      } 
     } 
    } 
} 

但是這種方法的問題是它的時間複雜度... OS N^3,所以如果我不得不產生來自6號的總和當列表大小爲20時,它將是n^6,這不是預期的。

設想二

我雖然我可以對列表進行排序,但後來我將使用什麼邏輯來選擇3個整數,所以,它的總和在列表中是獨一無二的。

比方說我對列表進行排序,並選擇三個最小的數字或從排序列表中選擇第3個3 + 1 =第4個和3 + 2個=第5個元素,並且sum=List[3]+List[4]+List[5];這個也沒有預料到,任何模式選擇三個不建議使用數字。它應該隨機選擇,總和應該是唯一的。

所以我沒有得到任何想法爲此產生最佳解決方案。

任何人都可以請幫助我。

+1

嗯,我不確定是否有一種無偏見的方式來找到避免計算每個組合並隨機選擇一個獨特組合的獨特總和。像阿米爾的答案一樣,任何捷徑或聰明的伎倆必然會有偏差。 – InBetween

回答

1

只使用3個最大的數字。

+1

爲什麼分心?在我看來,*總是*選擇3最大將做的伎倆。否則,如果你有正數和負數,會發生什麼? – InBetween

+0

@InBetween你說得對,我在腦海中有另一種限制。更新。 –

+0

最小的數字或三個最大的數字不是預期的情景,我更新了我的問題,甚至可以說我選擇了任何數字4,然後我選擇4 + 1,然後選擇4 + 2元素,這也不是預期的。它應該是隨機的 – Debhere

相關問題