劍指offer解題思路簡述:61-67

  • 面試題61:撲克牌中的順子

方法:五張牌排序,把大小王先當作零,然後統計零的個數,挨個求相鄰兩個數的間隔,若果間隔有0,表明有重複牌,則不可能是順子,如果0的個數大於所有數間隔的和,則是順子

  • 面試題62:圓圈中最後剩下的數字

方法一:約瑟夫環,環形鏈表模擬圓圈,用list,k = (start + m - 1) % n ,k爲每次要刪除的數

方法二:找到每次被刪除數字的規律直接計算,

  • 面試題63:股票的最大利潤

方法:從前往後遍歷,記錄當索引之前的數的最小值,然後用當前數減去最小值,每次循環需要更新最小值和差值的最大值

  • 面試題64:求1+2+....+n

方法一:利用條件與的短路特性,即and前面的條件如果不滿足,不會執行後面的表達式,利用這點實現遞歸的if返回判斷return n and (n+self.Sum_Solution(n-1))

方法二:利用構造函數、函數指針、虛函數、模板等來實現

  • 面試題65:不用加減乘除做加法

方法:利用位運算,每次把兩個數相抑或,得到沒有計算進位的結果,然後兩個數相與並<<1,得到只計算進位的結果,然後把得到的兩個數作爲新的加數,重複以上運算,知道表示進位的數爲0

  • 面試題66:構造乘積數組

方法1:直接暴力連乘,時間複雜度n*2

方法2:通過i來劃分左右兩個部分,左面的a(n) = a(n-1)*A(n),右邊的b(n-1) = b(n)*A(n),然後B(n)=a(n)*b(n)

  • 面試題67:把字符串轉化爲整數

方法一:直接用int()函數,可以用try 和except來捕獲異常

方法二:按部就班的寫,注意開頭是‘+’或者‘-’號的情況

  • 面試題68:樹中兩個節點的最低公共祖先

情況一:是二叉搜索樹,利用已經排序的條件,挨個判斷跟節點,如果比兩個節點都大,則最低公共祖先在左子樹

情況二:不是二叉樹,但有指向父節點的指針,可以把此問題轉化成求兩個鏈表相交的第一個節點的題

情況三:不是二叉樹,沒有指向父節點的指針,需要先分別將兩條路徑保存,然後求這兩條路徑的最後一個公共節點

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章