原创 【劍指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[0] =

原创 【劍指offer】64. 滑動窗口的最大值

問題描述 給定一個數組和滑動窗口的大小,找出所有滑動窗口裏數值的最大值。例如,如果輸入數組{2,3,4,2,6,2,5,1}及滑動窗口的大小3,那麼一共存在6個滑動窗口,他們的最大值分別爲{4,4,6,6,6,5}; 針對數組{2

原创 【劍指offer】 58. 對稱的二叉樹

問題描述 請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。 思路 方法一,再新建一棵樹,新建的時候就把它建立成鏡像的。 然後判定這兩棵樹是不是同一棵樹就OK。這樣要遍歷

原创 【劍指offer】61. 序列化二叉樹

問題描述 請實現兩個函數,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式保存爲字符串,從而使得內存中建立起來的二叉樹可以持久保存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷方

原创 【劍指offer】59. 按之字形順序打印二叉樹

問題描述 請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。 思路 可以用一個棧。照樣層序遍歷,只不過在倒着走的層用一個棧保存數字,遍歷

原创 【劍指offer】63.數據流中的中位數

問題描述 如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從數據流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用Insert()方法讀取數

原创 【劍指offer】60. 把二叉樹打印成多行

問題描述 從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 思路 比上題還簡單,用層序遍歷即可。 方法一 public class Solution { ArrayList<ArrayList<Intege

原创 【劍指offer】65. 矩陣中的路徑

問題描述 思路 DFS經典問題。沒啥好說的。說點技巧把。 方向數組的應用,剪枝的應用。 方法一 import java.util.*; public class Solution { private int rows,

原创 【leetcode】54.字符流中第一個不重複的字符

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

原创 【劍指offer】52. 正則表達式匹配

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

原创 【劍指offer】56. 刪除鏈表中重複的結點

問題描述 在一個排序的鏈表中,存在重複的結點,請刪除該鏈表中重複的結點,重複的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理後爲 1->2->5 思路 添加頭結點,便於統一處理。設置一個rea

原创 【劍指offer】66. 機器人的運動範圍

問題描述 地上有一個m行和n列的方格。一個機器人從座標0,0的格子開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數位之和大於k的格子。 例如,當k爲18時,機器人能夠進入方格(35,37),因爲

原创 【leetcode】57. 二叉樹的下一個結點

問題描述 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。 思路 二叉樹中序遍歷的下一個結點,意思就是根據左中右來看的。如果這個結點有右子樹,則

原创 【劍指offer】62.二叉搜索樹的第k個結點

問題描述 給定一棵二叉搜索樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8) 中,按結點數值大小順序第三小結點的值爲4。 思路 二叉搜索樹的中序遍歷是有序序列。我們可以把二叉搜索樹的中序遍歷讀到一個arra

原创 【leetcode】55. 鏈表中環的入口結點

問題描述 給一個鏈表,若其中包含環,請找出該鏈表的環的入口結點,否則,輸出null。 思路 單鏈表如果有環,則這個環肯定在尾巴上。 而且,環的開頭和結尾都是一個結點。所以我們可以用Hash表在時空複雜度都是O(n)的情況下解決這個