第十八題
題目:n 個數字(0,1,…,n-1)形成乙個圓圈,從數字0 開始,
每次從這個圓圈中刪除第m 個數字(第乙個為當前數字本身,第二個為當前數字的下乙個數
字)。當乙個數字刪除後,從被刪除數字的下乙個繼續刪除第m 個數字。
求出在這個圓圈中剩下的最後乙個數字。
分析:這道題有很多解法, 給出了目前最快的演算法。
本題目使用了鍊錶的增刪,直到剩餘乙個節點的時候即為最後輸出的值,設表長度為n,每次刪除第m個元素,則複雜度為mn。
**:#includeusing namespace std;
struct node
;int listcondelete(int length, int k)
nodecurrent->nodenext = nodehead;
nodehead->nodeprevious = nodecurrent;
list = nodehead;
node * tempdele;
while(list!=list->nodenext)
tempdele = list;
list->nodeprevious->nodenext = list->nodenext;
list->nodenext->nodeprevious = list->nodeprevious;
list = list->nodenext;
//coutdelete tempdele;
} return list->value;
}int main()
{ cout<
微軟等資料結構與演算法面試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 分析 可以根據空格符將單詞分開,然後針對每個單詞進行操作,...