劍指offer 解題思路簡述總結篇1-10

只記錄需要技巧有些許難度的題

  • 面試題3,數組中重複的數字

方法一:排序後從頭開始依次比較相鄰的兩個是否相等,相等即重複,nlogn

方法二:利用新的存儲空間set類型,挨個取數據看是否已經存在set中,存在return,不存在add,n

方法三:從頭開始遍歷num,將每個數的數值x和它的下表i進行比較,不等則將num[i]和num[x]進行比較,相等則return,不相等則交換,交換後仍重複上述過程,直到數值和下表相等,n

  • 面試題4,二維數組中的查找

方法:從右上角的數x開始比較,若需要查找的數大於x,則行數加1,若小,則列數減1

也可以選左下角

  • 面試題5,替換空格

方法:遍歷空格的數量,求出字符串變化之後的長度,從字符串的後面開始複製和替換,設置兩個指針,一個是變換後的長度的最後p1,一個是字符串的最後p2,當碰到空格,p1處加上替換字符,p2處往前挪一個,當p1和p2只向同一個位置說明可以結束

相似題目:

  • 面試題6,從尾到頭打印鏈表

方法一:從頭讀取鏈表,保存在list中,每次指定位置insert新的節點值list.insert(位置,數值)

方法二:用倆個list,一個從頭到尾存儲值,結束後,pop出每個值到另一個list中

方法三:在方法二前半段的基礎上直接調用reverse()或者[::-1]

  • 面試7,重建二叉樹

方法:遞歸,每次從根據前序遍歷中的根節點將中序遍歷和前序遍歷分成兩部分,遞歸處理這兩部分

  • 面試題8:二叉樹的下一個節點

方法:分情況討論,如果有右子樹的話,找到右子樹中的左子葉節點,如果沒有的話,找到第一個該節點是其左子節點的節點

  • 面試題9:兩個棧實現隊列

方法:分別創建兩個list,stack1和stack2,append方法直接往stack1中append,delete方法中先判斷stack2是否爲空,是的話將stack1中的元素全部壓到stack2中,輸出stack2的棧頂元素

相似問題:兩個隊列實現棧

方法:分別創建兩個list,queue1和queue2,append方法直接往queue1中append,delete方法先 把queue1中的元素放入到queue2中只剩一個元素,彈出該元素,完成後將queue1和queue2互換,以供下一次用

  • 面試題10:斐波那契數列

方法:不要用遞歸,當n大於2開始,設置m,n兩個數,temp=m+n,m=n,n=temp

相似問題:

方法:和斐波那契數列一模一樣

方法:1-1,2-2,3個臺階時是2個臺階的2倍,4個臺階的時候是3個臺階的2倍

方法:斐波那契數列

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