原创 一刷劍指offer(25)——二叉樹中和爲某一值的路徑

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

原创 一刷劍指offer(31)——連續子數組的最大和

題目: 輸入一個整型數組,數組裏有正數也有負數。數組中一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。要求時間複雜度爲O(n)。例如輸入數組{1,-2,3,10,-4,7,2,-5},和最大子數組爲{3,10,-4,7,2}

原创 一刷劍指offer(17)——合併兩個排序的鏈表

題目: 輸入兩個遞增排序的鏈表,合併這兩個鏈表並使新鏈表中的結點仍然是按照遞增排序的。鏈表結點定義如下: struct ListNode { int m_nValue; ListNode* m_pNext; }; 需要

原创 一刷劍指offer(37)——兩個鏈表的第一個公共結點

題目: 輸入兩個鏈表,找出它們的第一個公共結點。鏈表結點定義如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 最直接的做法:在第一鏈表上順序遍歷每

原创 一刷劍指offer(16)——反轉鏈表

題目: 定義一個函數,輸入一個鏈表的頭結點,反轉該鏈表並輸出反轉後鏈表的頭結點。 鏈表結點定義如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 爲了正確反轉一

原创 一刷劍指offer(30)——最小的k個數

題目: 輸入n個整數,找出其中最小的k個數。例如輸入4、5、1、6、2、7、3、8這8個數字,則最小的4個數字是1、2、3、4。 最簡單的思路:將輸入的n個整數排序,排序之後位於最前面的k個數就是最小的k個數。時間複雜度O(nlogn)

原创 一刷劍指offer(40)——數組中只出現一次的數字

題目: 一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字,要求時間複雜度爲O(n),空間複雜度爲O(1)。例如輸入{2,4,3,6,3,2,5,5},輸出4和6。 異或的性質: 若A!=B,則A

原创 一刷劍指offer(32)——從1到n整數中1出現的次數

題目:輸入一個整數n,求從1到n這n個整數的十進制表示中1出現的次數。例如輸入12,從1到12這些整數裏,包含1的數字有1,10,11,12,1一共出現5次。 最直接的思路:直接累加每個整數1出現的次數。 對於小於10的數,對10求餘判

原创 一刷劍指offer(22)——棧的壓入,彈出序列

題目: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否爲該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1、2、3、4、5是某棧的壓棧序列,序列4、5、3、2、1是該壓棧序列對應的一個彈出序列,但4、3、5、1

原创 一刷劍指offer(33)——把數組排成最小的數

題目: 輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3、32、321},則打印321323。 最直接的做法:先求出這個數組中所有數字的全排列,然後把每個排列拼起來,最後求出拼

原创 一刷劍指offer(27)——二叉搜索樹與雙向鏈表

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

原创 新建servlet的時候自動生成web.xml配置

如果還未建項目,那麼選擇Dynamic Web project的module verision選擇2.5,如果選了3,那麼就不會自動生成。 如果已建項目,考慮重建項目,再選擇2.5

原创 一刷劍指offer(43)——n個骰子的點數

題目: 把n個骰子扔在地上,所有骰子朝上的一面的點數之和爲s。輸入n,打印出s的所有可能的值出現的概率。 骰子一共6個面,每個面上對應一個點數(1-6)。 所以n個骰子點數和min=n,max=6n。 n個骰子所有點數的排列數爲6^n。

原创 一刷劍指offer(47)——不用加減乘除做加法

題目: 寫一個函數,求兩個整數之和,要求在函數體內不得使用加減乘除四則運算符號。 求兩數之和四則運算不可用,也就是說,只能用位運算。 分析一下十進制加法的步驟: 1、各位相加不進位 2、做進位 3、將前面兩個結果加起來 轉換成位運算:

原创 一刷劍指offer(49)——把字符串轉換成整數

enum Status {kValid=0,kInValid}; int g_nStatus=kValid; long long StrToIntCore(const char* digit,bool minus) { lon