原创 劍指offer(三十)——連續子數組的最大和

劍指offer(三十)——連續子數組的最大和 題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全爲正數的時候,問題很好解決

原创 劍指offer(十九)——順時針打印矩陣

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

原创 劍指offer(十四)——鏈表中倒數第k個結點

劍指offer(十四)——鏈表中倒數第k個結點 題目描述 輸入一個鏈表,輸出該鏈表中倒數第k個結點。 題解 public static ListNode FindKthToTail(ListNode head,int k) {

原创 劍指offer(十八)——二叉樹的鏡像

劍指offer(十八)——二叉樹的鏡像 題目描述 操作給定的二叉樹,將其變換爲源二叉樹的鏡像。 題解 這道題思路就很簡單了,只需要將每個節點的左右節點進行交換就可以完成任務了。 public void Mirror(TreeNod

原创 劍指offer(十七)——樹的子結構

劍指offer(十七)——樹的子結構 題目描述 輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構) 題解 首先理解題意,B是A的子結構的前提是,B樹是A樹的一部分,即從B的根節點開始,要與A

原创 劍指offer(三十八)——二叉樹的深度

劍指offer(三十八)——二叉樹的深度 題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。 題解 直接深度優先搜索(DFS)解決問題。 初始版 講道

原创 劍指offer(二十一)——棧的壓入、彈出序列

劍指offer(二十一)——棧的壓入、彈出序列 題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能爲該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5

原创 劍指offer(二十二)——從上往下打印二叉樹

劍指offer(二十二)——從上往下打印二叉樹 題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右打印。 題解 這個題意一理解就知道是二叉樹的層序遍歷,層序遍歷就是BFS(廣度優先搜索),直接隊列搞起就可以,這個搜索還是得

原创 劍指offer(十三)——調整數組順序

劍指offer(十三)——調整數組順序 題目描述 輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 題解 思路

原创 劍指offer(二十三)——二叉搜索樹的後序遍歷

劍指offer(二十三)——二叉搜索樹的後序遍歷 題目描述 輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。 題解 首先我們需要了解二叉搜索

原创 劍指offer(五)——用兩個棧實現隊列

劍指offer(五)——用兩個棧實現隊列 題目描述 用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。 題解 這道題首先要了解棧和隊列的性質是什麼? 棧:先進後出 隊列:先進先出 先看代碼:

原创 劍指offer(三十三)——醜數

劍指offer(三十三)——醜數 題目描述 把只包含質因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因爲它包含質因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。 題

原创 劍指offer(二十五)——複雜鏈表的複製

劍指offer(二十五)——複雜鏈表的複製 題目描述 輸入一個複雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點),返回結果爲複製後複雜鏈表的head。(注意,輸出結果中請不要返回參數中

原创 劍指offer(三)——從尾到頭打印鏈表

劍指offer(三)——從尾到頭打印鏈表 題目描述 輸入一個鏈表,按鏈表從尾到頭的順序返回一個ArrayList。 題解 這個題一下子能想到的就是將鏈表複製到一個ArrayList中,然後進行翻轉,這是第一個解法。在後面的思考中又

原创 劍指offer(十一)——二進制中1的個數

劍指offer(十一)——二進制中1的個數 題目描述 輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。 題解 這道題只要知道十進制數字如何用二進制數字表示和補碼的定義即可做出。 解一: 因爲Java裏面是有二進制轉