根據上排給出十個數,在其下排填出對應的十個數


傳說是一道騰訊的面試題

題目如下:

根據上排給出十個數,在其下排填出對應的十個數   
要求下排每個數都是先前上排那十個數在下排出現的次數。   
上排的十個數如下:   
【0,1,2,3,4,5,6,7,8,9】


沒錯,題目就是只有這么一點。思考過程:

第一排的數字: 0   1    2   3   4    5     6    7    8    9    

如果下一排全是0的話,那么,0下面(即指第二排,之后類似)就應該是10,這樣,0下的的數字就應該是9,那么9下面就應該是1,那么1下面就應該是1,那么0下面就成了7,這樣9下面的1就不應該存在了,反而7下面是1,這樣1下面是1,7下面也是1,這樣1下面就應該是2,不過這個又帶來一個問題就是,1下面是2就是錯的了,這樣就沒有辦法收斂了,所以呢,如果2下面是1的話,那么1下面是2,就這么成立了。所以呢,最后的結果就是,0下面是6,1下面2,2下面1,6下面1,其余都是0,也就是:

第一行  0  1   2   3   4    5    6    7    8    9

第二行  6  2   1   0   0    0    1    0    0    0

這樣就滿足了題目中的要求: 下排每個數都是先前上排那十個數在下排出現的次數。  


不過這東西還有一些數學上的分析,同樣轉自: http://blog.csdn.net/wcyoot/article/details/6428305

 

1)下排n個數的累加和為n,即b[0]+b[1]+...+b[n-1] = n

     總共有n個數字,下一排的每個數字為在下一排出現的次數,如果能夠構造成功,肯定是要出現n次,簡單的說,0出現6次,也就是下一排中有6個位置被0占據,下一排總共有n個位置,所以你能夠占據的位置和也就是n。

2)ai*bi的累加和也為n,即a[0]*b[0]+a[1]*b[1]+...+a[n-1]*b[n-1] = n

     這個理解起來比較別扭,可以這么理解,比如6和下面的1,就是,下面的位置中,有一個數字為6,0和下面的6就說明,下面的數字中有六個數字為0,同理可以理解其他的,這樣  希格瑪(a[i]*b[i]) 之后的結果就是一下排數字的和,也就是下一排數字的和,也就是n

3)對於b中任意一個元素b[j], 都存在i,a[i] = b[j].

4)對於b中任意一個元素b[j],都有b[j] >= 0

5)如果a中存在負數。其在b中出現的次數一定為0. 如果a中數值大於n,則其出現次數也為0.

6)a中至少有兩個非0數值在b中出現的次數非0

 

a:由1)n > n*b[i],其中b[i]為最小值,則a b中一定均有數值0,否則無解。設a[0] = 0,b[0]為a[0]在b中出現次數。

b:由於b中一定存在0,則0的出現次數一定大於0,因此b[0]>0 且b[0] < n,b[1...n-1]中至少一個值為0. 非0元素出現的次數一共是n-b[0].

c:有2)和6)對任意a[i],a[i]*b[i] < n,即b[i] < n/a[i],對所有a[i]>=n/2的元素中,在b中出現的次數必須最多只有1個出現次數不為0,且為1.其余出現次數均為0,即[1, n/2)范圍內最多只有n/2-1個元素,故0出現的次數必不小於n/2, [n/2,n)范圍內的元素必有一個出現次數為1。因此a數列中也必須有1,否則無解。

d:有c得在數值范圍為(0,n/2)中(假設有x這樣的數)出現的次數和s為n - b[0]或n-b[0]-1。其中1出現的次數至少為1(由c得)。又如果1出現的次數為1,則1出現的次數已經為2,故1出現的次數必大於1.設為x, 則x出現的次數至少為1,而x>1,如果x出現的次數大於1,那么必須要有其他數出現的次數為x,這樣無法收斂。故x出現的次數只能為1,1出現的 次數只能為2.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM