Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/25411174200722991933440/題目:定義Fibonacci數列如下: / 0 n=0f(n)= 1 n=1 \ f(n-1)+f(n-2) n=2輸入n,用最快的方法求該數列的第n項。分析:在很多C語言教科書中講到遞迴函式的時候,都會用Fibonacci作
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/2541117420073993725873/題目:定義字串的左旋轉操作:把字串前面的若干個字元移動到字串的尾部。如把字串abcdef左旋轉2位得到字串cdefab。請實現字串左旋轉的函數。要求時間對長度為n的字串操作的複雜度為O(n),輔助記憶體為O(1)。分析:如果不考慮時間和空間複雜度的限制,最簡單的方法莫過於把這道題看成是把字串分成前後兩部分,通過旋轉操作把這兩個部分交換位置。於是我們可以新開闢一塊長度為n
Time of Update: 2018-12-03
首先要有一個可用的檔案系統,可以根檔案系統或者是QT檔案系統。其次,下載並安裝相關的製作工具。http://download.chinaunix.net/download/0008000/7062.shtml 這裡有兩個mtd-snapshot版本。推薦使用新版本,我在使用舊版本時,make出錯。高手可以為之折騰,新手推薦一次到位,能成功就好。本次使用mtd-snapshot-20050519.tar.bz2 執行命令:tar -xvjf
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/2541117420073118945734/題目:輸入一個整數,求該整數的二進位表達中有多少個1。例如輸入10,由於其二進位表示為1010,有兩個1,因此輸出2。分析:這是一道很基本的考查位元運算的面試題。包括微軟在內的很多公司都曾採用過這道題。一個很基本的想法是,我們先判斷整數的最右邊一位是不是1。接著把整數右移一位,原來處於右邊第二位的數字現在被移到第一位了,再判斷是不是1。這樣每次移動一位,直到這個整數變成
Time of Update: 2018-12-03
CSDN規定文章分三類:要麼是原創的,要麼是轉載的,還有就是翻譯的。其實這個很難描述許多的來源或者作者的意圖。在此,我聲明:原創 = 自己摸索的,網上很少,或者各種資料庫很少能看到的,並且該文章又有別於別的文章的。轉載 = 直接copy,或者是連結過來的。翻譯 = 這個是我寫這篇文章的目的。本部落格所有的翻譯指的是本作者經過尋找資料->本人實踐->得出與本文描述相符的結果的文章。
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/254111742007228357325/題目:輸入一個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。列印出和與輸入整數相等的所有路徑。例如輸入整數22和如下二元樹 10 / \
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/25411174200731139971/ 題目:輸入一個表示整數的字串,把該字串轉換成整數並輸出。例如輸入字串"345",則輸出整數345。分析:這道題儘管不是很難,學過C/C++語言一般都能實現準系統,但不同程式員就這道題寫出的代碼有很大區別,可以說這道題能夠很好地反應出程式員的思維和編程習慣,因此已經被包括微軟在內的多家公司用作面試題。建議讀者在往下看之前自己先編寫代碼,再比較自己寫的代碼和下面的參考代碼有哪
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/25411174200725319627/題目:輸入一個整數數組,判斷該數組是不是某二元尋找樹的後序遍曆的結果。如果是返回true,否則返回false。例如輸入5、7、6、9、11、10、8,由於這一整數序列是如下樹的後序遍曆結果: 8 / \ 6 10 / \ /
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/2541117420073293950662/題目:某隊列的聲明如下:template<typename T> class CQueue{public: CQueue() {} ~CQueue() {} void appendTail(const T& node); // append a element to tail void deleteHead(
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/2541117420073471124487/題目:輸入一個鏈表的頭結點,反轉該鏈表,並返回反轉後鏈表的頭結點。鏈表結點定義如下:struct ListNode{ int m_nKey; ListNode*
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/254111742007289205219/題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入“I am a student.”,則輸出“student. a am
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/25411174200722710364233/題目:下面是一個數組類的聲明與實現。請分析這個類有什麼問題,並針對存在的問題提出幾種解決方案。template<typename T> class Array{public: Array(unsigned arraySize):data(0), size(arraySize) { if(size > 0)
Time of Update: 2018-12-03
轉載地址:http://zhedahht.blog.163.com/blog/static/254111742007127104759245/題目:輸入一棵二元尋找樹,將該二元尋找樹轉換成一個排序的雙向鏈表。要求不能建立任何新的結點,只調整指標的指向。 比如將二元尋找樹 10 / \
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/2541117420072915131422/題目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(A?B:C)。分析:這道題沒有多少實際意義,因為在軟體開發中不會有這麼變態的限制。但這道題卻能有效地考查發散思維能力,而發散思維能力能反映出對編程相關技術理解的深刻程度。通常求1+2+…+n除了用公式n(n+1)/2之外,無外乎迴圈和遞迴兩種思
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/25411174200731844235261/題目:一個台階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法,並分析演算法的時間複雜度。分析:這道題最近經常出現,包括MicroStrategy等比較重視演算法的公司都曾先後選用過個這道題作為面試題或者筆試題。首先我們考慮最簡單的情況。如果只有1級台階,那顯然只有一種跳法。如果有2級台階,那就有兩種跳的方法了:一種是分兩次跳,每次跳1級;另外一種就是
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/25411174200712895228171/題目:定義棧的資料結構,要求添加一個min函數,能夠得到棧的最小元素。要求函數min、push以及pop的時間複雜度都是O(1)。分析:這是去年google的一道面試題。我看到這道題目時,第一反應就是每次push一個新元素時,將棧裡所有逆序元素排序。這樣棧頂元素將是最小元素。但由於不能保證最後push進棧的元素最先出棧,這種思路設計的資料結構已經不是一個棧了。在棧裡添
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/25411174200732102055385/題目:輸入兩個整數序列。其中一個序列表示棧的push順序,判斷另一個序列有沒有可能是對應的pop順序。為了簡單起見,我們假設push序列的任意兩個整數都是不相等的。比如輸入的push序列是1、2、3、4、5,那麼4、5、3、2、1就有可能是一個pop系列。因為可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/254111742007219147591/題目:輸入一個整形數組,數組裡有正數也有負數。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。求所有子數組的和的最大值。要求時間複雜度為O(n)。例如輸入的數組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組為3, 10, -4, 7,
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/25411174200732494452636/題目:輸入一個整數n,求從1到n這n個整數的十進位表示中1出現的次數。例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。分析:這是一道廣為流傳的google面試題。用最直觀的方法求解並不是很難,但遺憾的是效率不是很高;而要得出一個效率較高的演算法,需要比較強的分析能力,並不是件很容易的事情。當然,google的面試題中簡單的也沒
Time of Update: 2018-12-03
http://zhedahht.blog.163.com/blog/static/254111742007376431815/題目:如果字串一的所有字元按其在字串中的順序出現在另外一個字串二中,則字串一稱之為字串二的子串。注意,並不要求子串(字串一)的字元必須連續出現在字串二中。請編寫一個函數,輸入兩個字串,求它們的最長公用子串,並列印出最長公用子串。例如:輸入兩個字串BDCABA和ABCBDAB,字串BCBA和BDAB都是是它們的最長公用子串,則輸出它們的長度4,並列印任意一個子串。分析:求最