微軟等資料結構與演算法面試100題 第六題

2021-12-29 20:12:36 字數 914 閱讀 2506

第六題

題目:給你10分鐘時間,根據上排給出十個數,在其下排填出對應的十個數

要求下排每個數都是先前上排那十個數在下排出現的次數。

上排的十個數如下:

【0,1,2,3,4,5,6,7,8,9】

分析:這道題拿到題目第一感覺是使用迭代演算法計算,終止條件是求解得到上面的解。

如果使用迭代演算法,會造成一下兩個問題:1,迭代演算法不能夠保證收斂,因此可能陷入死迴圈,或者說是收斂不到解。2,迭代演算法不能夠求解全部的解,只能得到滿足該

條件的乙個解。

使用迭代演算法的**如下:

[cpp] 

#include 

#include 

using namespace std; 

bool timenoof(int * timenoof, int * array, const int length) 

for(int i = 0; i < length; i++) 

} //int sum=0; 

//for(int i=0; i

//array[length-1] = length - sum; 

return success; }  

void timesnoarray(int *a, int * timeno, const int length) 

}  int main() ;  

int b = ; 

timesnoarray(a,b,10); 

for(int i =0; i < 10; i++ ) cout<< b[i]<

return 0; 

} 在測試例子的時候,發現當n=10,即十個數如 0  1 2 3 4 5 6 7 8 9時候會在兩個解之間擺動,但是收斂不到需要求解的解。

其它更好的求解演算法待後續補充!也請各位大牛指正!

微軟等資料結構與演算法面試100題 第五題

第五題 查詢最小的k個元素 題目 輸入n個整數,輸出其中最小的k個。例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。分析 本題目要求計算n個整數的最小的k個,題目沒有直接給出複雜度的要求,因此有很多種解法。比如排序後一次輸出等 很多種解法。如果是要求複雜度為klo...

微軟等資料結構與演算法面試100題 第七題

第七題 微軟亞院之程式設計判斷倆個鍊錶是否相交 給出倆個單向鍊錶的頭指標,比如h1,h2,判斷這倆個鍊錶是否相交。為了簡化問題,我們假設倆個鍊錶均不帶環。問題擴充套件 1.如果鍊錶可能有環列?2.如果需要求出倆個鍊錶相交的第乙個節點列?分析 實現 includeusing namespace std...

微軟等資料結構與演算法面試100題 第十題

第十題 翻轉句子中單詞的順序。題目 輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入 i am a student.則輸出 student.a am i 分析 可以根據空格符將單詞分開,然後針對每個單詞進行操作,...