原创 劍指Offer_38_二叉樹的深度

題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。 解題思路 遞歸求左右子樹的高度,將其中較高的子樹高度加1就是當前樹的高度。 實現 /*樹結點的定義

原创 劍指Offer_31_整數中1出現的次數(從1到n整數中1出現的次數)

題目描述 求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?爲此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。ACMer希望你們幫幫他,並把

原创 劍指Offer_47_求1+2+3+...+n

題目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 解題思路 使用一個實例變量保存結果,每次遞歸調用(返回值爲boolean)和 n

原创 劍指Offer_44_翻轉單詞順序列

題目描述 牛客最近來了一個新員工Fish,每天早晨總是會拿着一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識

原创 劍指Offer_30_連續子數組的最大和

題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全爲正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負

原创 劍指Offer_52_正則表達式匹配

題目描述 請實現一個函數用來匹配包括’.’和’‘的正則表達式。模式中的字符’.’表示任意一個字符,而’‘表示它前面的字符可以出現任意次(包含0次)。 在本題中,匹配是指字符串的所有字符匹配整個模式。例如,字符串”aaa”與模式”a.a”和

原创 劍指Offer_58_對稱的二叉樹

題目描述 請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。 解題思路 從根結點開始判斷,首先判斷左右子樹是否相同,然後對於相同的結點,判斷兩個結點的左子樹和另一個結點的右子樹是

原创 大文件排序

大文件排序 對於很大的文件中的內容進行排序,不能和普通的排序一樣將所有的數據讀取到內存,然後對數據進行排序,因此需要使用外部排序進行整個文件的排序。 基本思路 首先將文件分割一個個小的文件,對於每個小的文件的內容使用普通的排序方法進行排序

原创 劍指Offer_60_把二叉樹打印成多行

題目描述 從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 解題思路 這題是二叉樹的層序遍歷,每層打印一行,每次需要記錄下一次打印的個數,其餘和層序遍歷相同。 實現 /*樹結點定義*/ public class TreeN

原创 劍指Offer_54_字符流中第一個不重複的字符

題目描述 請實現一個函數用來找出字符流中第一個只出現一次的字符。例如,當從字符流中只讀出前兩個字符”go”時,第一個只出現一次的字符是”g”。當從該字符流中讀出前六個字符“google”時,第一個只出現一次的字符是”l”。  輸出描述:

原创 劍指Offer_65_矩陣中的路徑

題目描述 請設計一個函數,用來判斷在一個矩陣中是否存在一條包含某字符串所有字符的路徑。路徑可以從矩陣中的任意一個格子開始,每一步可以在矩陣中向左,向右,向上,向下移動一個格子。如果一條路徑經過了矩陣中的某一個格子,則該路徑不能再進入該格子

原创 劍指Offer_59_按之字形順序打印二叉樹

題目描述 請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。 解題思路 這題的思路和二叉樹的層序遍歷類似,每次遍歷將當前遍歷結點左右子結點加入到

原创 劍指Offer_63_數據流中的中位數

題目描述 如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從數據流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。 解題思路 用兩個推保存數據,保持兩個堆的

原创 劍指Offer_56_刪除鏈表中重複的結點

題目描述 在一個排序的鏈表中,存在重複的結點,請刪除該鏈表中重複的結點,重複的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理後爲 1->2->5 解題思路 利用一個指針指向當前需要檢查的結點p的前一個

原创 劍指Offer_51_構建乘積數組

題目描述 給定一個數組A[0,1,…,n-1],請構建一個數組B[0,1,…,n-1],其中B中的元素B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。 解題思路 對於每一個B[i],首先從前往