原创 面試題:把數組排成最小的數

輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接處的所有數字中最小的一個。例如,輸入數組{3,32,321},則打印出這3個數字能排成的最小數字321323。 思路:暴力全排列基本屬於不可考慮的情況,O(n!)。那麼考慮

原创 面試題:字符串的排序

輸入一個字符串,打印出該字符串中字符的所有序列。例如,輸入字符串abc,則打印出由字符a、b、c所能排列出來的所有字符串abc、acb、bac、bca、cab和cba。 void Permutation(char* pStr) {  if

原创 面試題:把數字翻譯成字符串

給定一個數字,我們按照如下規則把它翻譯爲字符串:0翻譯成“a”,1翻譯成“b”,·······,25翻譯成“z”。一個數字可能有多個翻譯。例如,12258有5種不同的翻譯,分別是“bccfi”、"bwfi"、"bczi"、"mcfi"和"

原创 面試題:對稱的二叉樹

請實現一個函數,用來判斷一顆二叉樹是不是對稱的。如果一顆二叉樹和它的鏡像一樣,那麼它是對稱的。 思路:三種二叉樹的遍歷算法,即前、中、後序遍歷方式,都是先左後右的操作。想到這裏一看人家的答案,算了,我還是抄上來吧。 bool isSym

原创 面試題:二叉搜索樹的後續遍歷序列

輸入一個整數數據,判斷該數組是不是某二叉搜索樹的後續遍歷結果。如果是則返回true,否則返回false。假設輸入的數組的任意兩個數字都互不相同。 關於樹的遍歷問題相對解法比較單一,固定套路。 bool VerifySequenceOfB

原创 面試題:禮物的最大價值

在一個mxn的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於0)。你可以從棋盤的左上角開始拿格子裏的禮物,並每次向右或者向下移動一個,直到到達棋盤的右下角。給定一個棋盤及其上面的禮物,請計算你最多能拿到多少價值的禮物? 思

原创 面試題:最小的k個數

輸入n個整數,找出其中最小的k個數。例如,輸入4、5、1、6、2、7、3、8這8個數字,則最小的4個數字是1、2、3、4。 思路:O(nlogn)排序,然後輸出。額,肯定速度上還有更高的要求。跟求中位數一樣花O(n)的時間一樣,這個等於求

原创 面試題:二叉樹中和爲某一值的路徑

輸入一顆二叉樹和一個整數,打印出二叉樹中節點值和爲輸入整數的所有路徑。從數的根節點開始從下一直到葉節點所經過的節點形成一條路徑。二叉樹節點定義如下: struct BinaryTreeNode {  int m_nValue; Binar

原创 面試題:二叉搜索樹與雙向鏈表

輸入一顆二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的節點,只能調整樹種節點指針的指向。 節點定義如下: struct BinaryTreeNode {  int m_nValue; BinaryTreeNode

原创 面試題:醜數

我們把只包含因子2、3和5的數稱爲醜數(Ugly Number)。求按從大到小的順序的第1500個醜數。例如,6、8都是醜數,但14不是,因爲它包含因子7。習慣上我們把1當作第1個醜數。 思路:先來一個由定義得到的算法,再看看有沒有優化

原创 面試題:1~n整數中1出現的次數

輸入一個整數,求1~n這n個整數的十進制表示中1出現的次數。例如,輸入12,1~12這些整數中包含1的數字有1、10、11和12,1一共出現了5次。 思路:這又是一道時間優化題。 答案如下: int NumberOf1Between1A

原创 面試題:最長不含重複字符的子字符串

請從字符串中找出一個最長的不包含重複字符的子字符串,計算該最長子字符串的長度。假設字符串中只包含'a'~'z'的字符。例如,在字符串“arabcacfr”中,最長的不含重複字符的子字符串是“acfr”,長度爲4。 思路:常規套路的話,先求

原创 面試題:數字序列中某一位的數字

數字以0123456789101112131415····的格式序列化到一個字符序列中。在這個序列中,第5位(從0開始計數)是5,第13位是1,第19位是4,等等。請寫一個函數,求任意第n位對應的數字。 思路:利用進位縮小範圍。 int

原创 面試題:包含min函數的棧

定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的min函數。在該棧中,調用min、push及pop的時間複雜度都是O(1)。 思路:push 和pop肯定都是符合要求的,那麼min該怎麼辦呢?常數時間,那麼就必須空間換時間了

原创 面試題:第一個只出現一次的字符

字符串中第一個只出現一次的字符。 在字符串中找到第一個只出現一次的字符。如輸入“abaccdeff”,則輸出'b'。 思路:那麼我們知道有一種神奇的算法是能夠在O(1)時間內找到結果,沒錯,它就是牛逼的哈希表。 那麼看下C++下對這道題的