原创 牛客網-直通BAT面試算法精品課購買優惠碼

已看部分視頻,講解詳細,對互聯網校招面試筆試算法複習很有幫助。 專屬優惠碼爲: AigxZ1N    專屬優惠購課鏈接:http://www.nowcoder.com/courses/1?coupon=AigxZ1N  購買時選擇使用

原创 【劍指offer】二叉搜索樹的後序遍歷序列

題目: 輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。 分析: 後序遍歷的最後一個值爲二叉樹的根節點值,判斷是否爲二叉搜索樹,遞歸判斷是否左子樹

原创 【劍指offer】合併兩個排序的鏈表

題目: 輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。 分析: 兩個鏈表已是遞增,只需要從頭遍歷,將較小的結點插入新鏈表,移動指針,繼續比較即可。簡單程序要注意魯棒性。 實現: <span

原创 【劍指offer】二叉樹的鏡像(遞歸+非遞歸)

題目: 操作給定的二叉樹,將其變換爲源二叉樹的鏡像。  分析: 求二叉樹鏡像,即將二叉樹的左右子樹交換,直至葉子結點。 實現:(遞歸) public void Mirror(TreeNode root) { if (root ==

原创 【劍指offer】O(1)時間刪除鏈表結點

題目: 給定單向鏈表的頭結點和一個結點,定義一個函數在O(1)時間內刪除該結點。 分析: 刪除鏈表結點常規做法爲:按照鏈表特點從頭結點找到該節點前一個結點,通過移動指針將指定結點從鏈表摘除,時間爲O(n); 更簡單方式爲:通過已知的要刪

原创 【劍指offer】鏈表中倒數第k個結點

題目: 輸入一個鏈表,輸出該鏈表中倒數第k個結點。 分析: 鏈表只能從鏈表頭結點向後一個個訪問,要求倒數第K個,需要知道一共有多少個,進而知道倒數第K個是正數多少個。求個數需要先遍歷一遍。 最先想到的方式往往不是最優的,可以進一步改進。

原创 【劍指offer】棧的壓入、彈出序列

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

原创 【劍指offer】順時針打印矩陣

題目: 輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13

原创 【劍指offer】反轉鏈表(遞歸+非遞歸)

題目: 輸入一個鏈表,反轉鏈表後,輸出鏈表的所有元素。 分析: 反轉鏈表只需改變鏈接方向,改變方向時需要將原本指向後一個結點的鏈接方向指向前一個結點,因此需要記錄下三個結點。 實現:(非遞歸) public ListNode Rev

原创 【劍指offer】樹的子結構

題目: 輸入兩顆二叉樹A,B,判斷B是不是A的子結構。 分析: 判斷兩棵樹是否相包含,可以從頭結點開始比較,如果比較得到相同的結點,遞歸比較左右是否相同。 實現: <span style="font-family:Microsoft

原创 【劍指offer】複雜鏈表的複製

題目: 輸入一個複雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點),實現鏈表的複製。 分析: 首先想到的是先將鏈表的下一個節點鏈路複製出一條鏈表,再從頭開始將鏈表的任意節點指針複製,問題在於

原创 【劍指offer】調整數組順序使奇數位於偶數前面

題目: 輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於位於數組的後半部分。 分析: 數組的題目,調整位置需要移動元素,時間複雜度爲O(n^2),因此通常需要另闢蹊徑。 設定兩個指

原创 【劍指offer】(擴展)求鏈表中間結點

題目: 求鏈表中間結點,如果鏈表結點數爲奇數,返回中間結點;如果鏈表結點爲偶數,返回中間兩個結點中的任意一個。 分析: 首先想到的方式還是遍歷一次求出節點個數,第二次遍歷走一半個數得到中間結點。 靈活應用快慢指針,快指針每次走2步,慢指

原创 【劍指offer】(擴展)大數相加

問題: 實現一個加法,將兩個大數相加,不使用BigInteger。 分析: 使用字符串或者數組,實現每位相加進位,要注意兩個數對齊及最終進位的情況。 首先將兩個字符串倒置,方便補0將位數對齊及逐位相加。並且使用StringBuffer方

原创 【深入學習java集合框架】總篇章

       Java容器裏只能放對象,對於基本類型(int, long, float, double等),需要將其包裝成對象類型後(Integer, Long, Float, Double等)才能放到容器裏。很多時候拆包裝和解包裝能夠自