原创 微軟,Google面試題 (11) —— 求二叉排序樹的鏡像

題目:輸入一顆二元查找樹,將該樹轉換爲它的鏡像,即在轉換後的二元查找樹中,左子樹的結點都大於右子樹的結點。用遞歸和循環兩種方法完成樹的鏡像轉換。例如輸入:      8    /  /  6      10 //       //5  7

原创 微軟,Google面試題 (26) —— 和爲n連續正數序列

題目:輸入一個正數n,輸出所有和爲n連續正數序列。例如輸入15,由於1+2+3+4+5=4+5+6=7+8=15,所以輸出3個連續序列1-5、4-6和7-8。解法一:開闢一個大小爲n/2 + 1(n爲奇數,n爲偶數則大小爲n/2 - 1

原创 微軟,Google面試題 (8) —— 求1+2+...+n

題目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(A?B:C)。解法一:用遞歸,利用&&運算符的特性做。int solve(int n) { int i

原创 微軟,Google面試題 (19) —— 反轉單向鏈表

題目:輸入一個鏈表的頭結點,反轉該鏈表,並返回反轉後鏈表的頭結點。鏈表結點定義如下:struct ListNode { int m_nKey; ListNode* m_pNext; };解法一:起始節點

原创 微軟,Google面試題 (29) —— 調整數組順序使奇數位於偶數前面

題目:輸入一個整數數組,調整數組中數字的順序,使得所有奇數位於數組的前半部分,所有偶數位於數組的後半部分。要求時間複雜度爲O(n)。解法一:遍歷數組,遇到偶數。取出該值,然後將該值後面的元素依次向前移動一位。然後將該值放到數組的最後一位。

原创 微軟,Google面試題 (27) —— 二元樹的深度

題目:輸入一棵二元樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。例如:輸入二元樹:                                          

原创 利用歸併排序求數列中逆序對個數

參考了這篇文章:http://blog.csdn.net/MapReduce/archive/2007/05/20/1618515.aspx以前自己寫的歸併排序比較累贅,文章中的代碼更有條理,而且計算逆序對個數只需要一行代碼,是否對原數列

原创 微軟,Google面試題 (21) —— 左旋字符串(循環移位)

題目:定義字符串的左旋轉操作:把字符串前面的若干個字符移動到字符串的尾部。如把字符串abcdef左旋轉2位得到字符串cdefab。請實現字符串左旋轉的函數。要求時間對長度爲n的字符串操作的複雜度爲O(n),輔助內存爲O(1)。解法一:不考

原创 微軟,Google面試題 (13) —— 第一個只出現一次的字符

題目:在一個字符串中找到第一個只出現一次的字符。如輸入abaccdeff,則輸出b。解法一:常規解法。遍歷字符串,訪問到每一個字符時,檢查後面有沒有相同的字符。沒有則輸出。這種做法的時間複雜度是O(n^2)。解法二:利用hashtable

原创 微軟,Google面試題 (22) —— 跳臺階

題目:一個臺階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法,並分析算法的時間複雜度。解法一:就是一個Fibonacci數列的問題。1. f(1) = 1;  只有一階臺階的時候,只有一種跳法2. f(2) = 2;  

原创 微軟,Google面試題 (16) —— O(logn)求Fibonacci數列

題目:定義Fibonacci數列如下:         /  0                      n=0f(n)=      1                      n=1        /  f(n-1)+f(n-2) 

原创 微軟,Google面試題 (9) —— 查找鏈表的倒數第K個節點

題目:輸入一個單向鏈表,輸出該鏈表中倒數第k個結點。鏈表的倒數第0個結點爲鏈表的尾指針。鏈表結點定義如下:struct _Node { _Node * next; value_type v; } 解法:用兩個指針p1, p

原创 微軟,Google面試題 (12) —— 從上往下遍歷二叉樹

題目:輸入一顆二元樹,從上往下按層打印樹的每個結點,同一層中按照從左往右的順序打印。 例如輸入       8    /  /   6    10  //     // 5  7   9  11 輸出8   6   10   5   7 

原创 《編程之美》:最長公共子序列(串)

求最長公共子串有兩種情況:1, 不要求子串連續,兩個字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是它們的最長公共子串。2, 要求子串連續。對於上面兩個串來說,BD和AB是它們的最長公共子串。一,有關連續的已經寫過。設定一

原创 微軟,Google面試題 (24) —— 棧的push、pop序列

題目:輸入兩個整數序列。其中一個序列表示棧的push順序,判斷另一個序列有沒有可能是對應的pop順序。爲了簡單起見,我們假設push序列的任意兩個整數都是不相等的。例一:push序列爲12345,pop序列爲45321解法一:設計一個輔助