2016-09-26 30 views
-2

Array = [1 3 6];如何查找圖案?

我們可以分成稱爲塊相鄰段,並將它們存儲作爲另一個數組B:

B=[(1),(3),(6)]; B=1*1+3*1+6*1=10; 
B=[(1,3),6]; B=(1+3)*2+6*1=14; 
B=[(1,(3,6)]; B=1*1+(3+6)*2=19; 
B=[(1,3,6)]; B=(1+3+6)*3=30; 

當我們總結所有的結果,我們得到10+14+19+30=73。這是Array = [1,3,6]的最終結果。我希望找到任何數組大小的模式。

它可以是array[1,2,3,4,5,6],array[1,5,6,7], array[5,777,88,11,22]等。我該怎麼做?

+4

請格式化您的代碼,至少。照顧我們的眼睛。 –

+3

而我們的思想也是如此。 – 2016-09-26 06:13:39

+0

它適合可能是數學或codereview.stackexchane.com ...但格式是必須的:P –

回答

0

要編碼,您可能需要一個遞歸解決方案。像

int solve(int[] data) { 
    int len = data.length; 
    if(len ==1) return data[0]; 

    // for the full sequence (1,2,3,4,5) its just he length times 
    // the sum 
    int res = sum(data) * len; 

    // now consider partitions 
    for(int i=0;i<len-1;++i) { 
     res += solve(data[0 .. i]) 
     res += solve(data[i+1 .. len-1]) 
    } 
    return res 
} 
+0

如果我們得到數組大小10^6。這個遞歸解決方案獲得TLE,對於那種需要模式0(1)或0(nlong)解決方案。謝謝你的回覆@salix – Anik

+0

你可能會遇到一個數組大小的組合問題。您的問題與[分區]緊密相關(https://en.wikipedia.org/wiki/Partition_(number_theory))。我們可以估計分區的數量。數組長度爲10,000時,大約有3.6E106個分區,遠大於可以計算的分區數。一個非遞歸解決方案可能能夠增加最大大小,但它仍然會遇到一個限制。 –