微軟面試技術題

2021-05-05 01:13:34 字數 3037 閱讀 8083

1、反轉乙個鍊錶。迴圈演算法。

list reverse(list l)

return tmp;

} 2、反轉乙個鍊錶。遞迴演算法。

list resverse(list l)

return n;

} 3、廣度優先遍歷二叉樹。

void bst(tree t)

} class node

class queue else

} public tree deque() else

} 4、輸出乙個字串所有排列。注意有重複字元。

char p;

void perm(char s, int i, int n)

5、輸入乙個字串,輸出長型整數。

long atol(char *str)

while(isdigit(*p))

if(!p) return m*l;

else return error;

} 6、判斷乙個鍊錶是否有迴圈。

int isloop(list l)

if ( ! s) return - 1 ;

else reutrn 1 ;

} int isloop(list l)

if(p=l) return 1;

return 0;

} 實際上,在我的面試過程中,還問到了不破壞結構的其他演算法。

我的答案是從煉表頭開始遍歷,如果節點next指標指向自身,則迴圈存在;否則將next指標指向自身,遍歷下乙個節點。直至next指標為空,此時鍊錶無迴圈。

不是隨便兩個步長不同的指標都會在迴圈鍊錶上相遇。乙個充分條件是,兩個遍歷指標步長相差1。最好是1,2這兩個步長,這樣就可以進而求出迴圈的位置和鍊錶的大小。

7、反轉乙個字串。

void reverse( char * str)

} 8、實現strstr函式。

int strstr(char str, char par)else

} if(!str[j]) return i-strlen(par);

else return -1;

} 9、實現strcmp函式。

int strcmp(char* str1, char* str2)

return *str1-*str2;

} 10、求整形中二進位制1的位數

求乙個整形中1的位數。

int f( int x)

return n;

} 11、漢諾塔問題。

void tower(n,x,y,z)

} 12、漢諾塔最小步數

三柱漢諾塔最小步數。

int f3(n)

f3[n] = 2 * f3(n - 1 ) + 1 ;

return f3[n];

} }

四柱漢諾塔最小步數。

int f4(n)

min=2*f4(1)+f3(n-1);

for(int i=2;i

13、在乙個鍊錶中刪除另乙個鍊錶中的元素。

void delete(list m, list n) else if(a.value > b.value)else

} m=head.next;

} 14、乙個陣列,下標從0到n,元素為從0到n的整數。判斷其中是否有重複元素。

int hasduplicate(int a, int n)

} 17、兩個鍊錶,一公升一降。合併為乙個公升序鍊錶。

list merge(list a, list d) else

p = p.next;

} if (a) p.next = a;

elseif(a1) p.next = a1;

return q.next;

} 鍊錶逆序本來就是o(n),所以這道題再爛的做法也不會超過o(n)。我覺得先逆序再歸併不會比設計乙個個巧妙的方法一次組成目標鍊錶慢多少的

18、將長型轉換為字串。

char* ltoa(long l)

char* str=(char*)malloc(n*sizeof(char));

int j=0;

while(l)

return str;

} 19、用乙個資料結構實現

if (x == 0) y = a;

else y = b;

j = ;

y=j[x];

20、在雙向鍊錶中刪除指定元素。

void del(list head, list node)

if(!cur) return;

list post = cur.next;

pre.next=cur.next;

post.last=cur.last;

return;

} 21、不重複地輸出公升序陣列中的元素。

void outputunique( char str, int n)

++ j;

} }

} 22、面試過程中我還遇到了下面幾題:

1、如何刪除鍊錶的倒數第m的元素?我的方法是先用pre指標從煉表頭開始步進m,新建pst節點next指標指向頭節點,cur指標指向頭節點,然後pre,cur,post三個指標一起步進,當pre指向鍊錶結尾的時候cur指向倒數第m個元素,最後利用pst指標刪除cur指向元素。

2、如何判斷乙個字串是對稱的?如a,aa,aba。設定頭尾指標同時向中間比較靠齊直至相遇。

3、如何利用2函式找出乙個字串中的所有對稱子串?以子串頭指標和尾指標為迴圈變數設定兩個巢狀的迴圈以找出所有子串,對每個子串應用2函式。

微軟面試100題

41.求固晶機的晶元查詢程式 晶元盤由數目不詳的大小一樣的晶元組成,晶元並不一定全布滿晶元盤,照相機每次這能匹配乙個晶元,如匹配過,則拾取該晶元,若匹配不過,照相機則按測好的晶元間距移到下乙個位置。求遍歷晶元盤的演算法 求思路。兩個非降序鍊錶的並集,1 2 3 和 2 3 5 並為 1 2 3 5 ...

微軟面試智力題

1.燒繩子計時,繩子不均勻,每根繩子可以燒1個小時,要求計時45分鐘,1小時15分鐘。繩子數量不限。第一 取一根繩子兩頭同時點燃。取第二根繩子只點燃一頭。當第一根繩子燃燒完畢之後,耗時30分鐘。第二 當第一根繩子燃燒完畢之後,同時點燃第二根繩子的另外一頭,當第二根繩子燃燒完畢之後,又耗時15分鐘。累...

微軟面試100題 64

64.尋找醜數 運算 題目 我們把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第1500個醜數。分析 這是一道在網路上廣為流傳的面試題,據說google曾經採用過這道題。package...