原创 出鞘之劍指offer-第5題 (替換空格)

題目: 實現一個函數,把字符串中的每個空格替換成“%20”。 例如:輸入“We are happy”,則輸出“We%20are%20happy”。 分析一:  使用stringbuilder,遍歷原字符串,往stringbuilder

原创 出鞘之劍指offer-第10題 (斐波那契數列)

題目:  題目一:求斐波那契數列的第n項。 分析一:  用遞歸做 代碼一:  package offer.xzs.tenth; public class Fibonacci01 { public static void m

原创 出鞘之劍指offer-第9題 (用兩個棧實現隊列)

題目:  用兩個棧實現一個隊列。隊列的聲明如下,請實現他的兩個函數appendTail和deleteHead,分別完成在隊列尾部插入節點和在隊列頭部刪除節點的功能。 分析一:  棧是”先入後出“,隊列是”先入先出“。用兩個棧stack

原创 出鞘之劍指offer-第8題 (二叉樹的下一個節點)

題目:  給定一棵二叉樹和其中一個節點,如何找出中序遍歷序列的下一個節點?樹中的節點除了有兩個分別指向左、右子節點的指針,還有一個指向父節點的指針。 分析一:  (1)如果一個節點有右子樹,那下一個節點就是它右子樹的最左子節點。 (2

原创 出鞘之劍指offer-第6題 (從頭到尾打印鏈表)

題目:  輸入一個鏈表的頭節點,從尾到頭反過來打印出每個節點的值。鏈表節點定義如下: struct ListNode { int value; ListNode next; } 分析一:   使用遞歸。 代碼一: package o

原创 出鞘之劍指offer-第11題 (旋轉數組的最小數字)

題目:  把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如:數組{ 3, 4, 5, 1, 2 }爲{ 1, 2, 3, 4, 5 }的一個旋轉,該數組的

原创 出鞘之劍指offer-第7題 (重建二叉樹)

題目: 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含有重複的數字。 例如:輸入前序遍歷序列{ 1, 2, 4, 7, 3, 5, 6, 8 }和中序遍歷序列{ 4, 7, 2, 1,

原创 出鞘之劍指offer-第40題 (最小的k個數)

題目:  輸入 n 個整數,找出其中最小的 k 個數。例如輸入 4、5、1、6、2、7、3、8 這 8 個數字,則最小的 4 個數字是 1、2、3、4。 分析一: 先排序,然後取出前k個數。  代碼一: package offer.

原创 出鞘之劍指offer-第42題 (連續子數組的最大和)

題目: 輸入一個整數數組,數組裏有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。要求時間複雜度爲 O(n)。  分析一:   代碼一: package offer.xzs.fourty2fourt

原创 出鞘之劍指offer-第37題 (序列化二叉樹)

題目: 實現兩個函數,序列化和反序列化二叉樹。  分析一:   代碼一: package offer.xzs.thirty2thirtynine.thirtyseven; import java.util.Arrays; pu

原创 出鞘之劍指offer-第35題 (複雜鏈表的複製)

題目: 實現函數,複製一個複雜鏈表。在複雜鏈表中,每個節點除了有一個 next 指針指向下一個節點,還有一個 sibling 指針指向鏈表中的任意節點或者 null 。  分析一:  分三步:先複製next,在複製sibling, 最

原创 出鞘之劍指offer-第38題 (字符串的排列)

題目: 輸入一個字符串,打印出該字符串中字符的所有排列。  分析一: 用遞歸 代碼一: package offer.xzs.thirty2thirtynine.thirtyeight; import java.util.Array

原创 出鞘之劍指offer-第33題 (二叉搜索樹的後序遍歷序列)

題目:  輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷結果。返回 true 或者 false 。假設輸入的數組任意兩個數字都互不相同。 分析一: 由於後序遍歷的最後一個節點是一棵樹的根節點,而且,二叉搜索樹是根節點的左子樹

原创 出鞘之劍指offer-第39題 (數組中出現次數超過一半的數字)

題目:  數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲 9 的數組 { 1, 2, 3, 2, 2, 2, 5, 4, 2 } 。由於數字 2 在數組中出現了 5 次,超過數組長度的一半,因此輸出 2

原创 出鞘之劍指offer-第34題 (二叉樹中和爲某一值的路徑)

題目:  輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和爲輸入整數的所有路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 分析一:   代碼一: package offer.xzs.thirty2thi