原创 劍指offer 二進制中1的個數 java代碼

題目描述 輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。 思路:通過數學運算可以發現一個整數a與a-1按位與運算,即a & a-1,如果將結果表示爲二進制,相當於將a的二進制形式最右一個1變成0;比如 a=111(b)

原创 面試題 判斷數組中是否存在兩數和爲100

題目: 設計一個算法判斷一個數組中是否存在兩個整數的和爲100。 思路: 這個題目可能最直觀的想法是先排序,然後通過兩個指針一個從前往後一個從後往前移動,尋找合爲100的兩個整數。但是這個算法的時間複雜度爲 O(nlogn),不是很理想。

原创 劍指offer 鏈表中倒數第k個節點

題目描述 輸入一個鏈表,輸出該鏈表中倒數第k個結點。 思路: 先指定一個變量pointer走k-1個節點,然後head和pointer同時移動,直到pointer走到尾節點。本題一個陷阱在於如何解決異常問題。包括,k爲負值,k大於鏈表長

原创 劍指offer 重建二叉樹 java代碼

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

原创 劍指offer 變態跳臺階

題目描述 一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。 思路:先在紙上模擬跳臺階步驟,可以推導如下圖表。 當臺階數位n,f(n) = f(n-1) + f(n-2)

原创 劍指offer 旋轉數組的最小數字 java代碼

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

原创 劍指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,

原创 劍指offer 斐波那契數列

題目描述 斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。 n<=39 思路:最簡單的動態規劃思路的應用,每一個位置的值都基於前兩項的值。自上而下的思考,自下而上的實現。 參考代碼: public class Fi

原创 劍指offer 兩個棧實現隊列 java代碼

題目描述 用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。 思路:只要入棧,全部push到棧1;出棧,當棧2爲空,把棧1的數據全部pop到棧2,棧2不空,依次pop棧2即可。 public class

原创 劍指offer 二叉樹中和爲某一值的路徑

題目描述: 輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和爲輸入整數的所有路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,數組長度大的數組靠前) 思路: 採用先序遍

原创 劍指offer 調整數組位置使奇數位於偶數前面

題目描述 輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 思路: 本題稍微麻煩的是要求相對位置不改變,最直觀的

原创 Android View事件的分發機制(圖解)

學習了Android View事件的分發機制,繪製了一個流程圖,用作複習總結: