劍指offer 刷題有感

2021-09-13 13:41:16 字數 896 閱讀 4038

1、注意邊界值,結束迴圈的邊界條件,遞迴終止的邊界值;

2、注意細節,比如可以用右移運算子代替除以2,用位與運算子代替求餘運算子。位運算的效率比乘除法集求餘運算的效率要高很多;

3、思考複雜問題是否可以轉化為基本問題求解;

4、考慮到所有可能的輸入,要關注輸入引數,例如,輸入的指標是否是空指標,輸入的字串是否為空,鍊錶是否為空,要做出相應的處理。

5、計算機表示小數(包括float和double型小數)都有誤差,不能直接用等號(==)來判斷兩個小數是否相等。如果兩個小數的差的絕對值很小,如小於0.0000001,就可以認為它們相等。

鍊錶

當用乙個指標遍歷鍊錶不能解決問題,可以嘗試用兩個指標來遍歷鍊錶。可以讓其中乙個指標遍歷的速度快一些(比如一次在鍊錶上走兩步),或者讓它先在鍊錶上走若干步,要全面分析在**可能會引入空指標。

二進位制

把乙個整數減去1之後再和原來的整數在位與運算,得到的結果相當於把二進位制表示中最右邊的1變為0。

字串

在合併兩個陣列(包括字串)時,如果從前往後賦值每個數字(或字元)則需要重複移動數字(或字元)多次,可以考慮從後往前複製,這樣就能減少移動的次數,從而提高效率。

與二叉樹相關的**有大量的指標操作,在每次使用指標的時候,都要問自己這個指標有沒有可能是nullptr,如果是nullptr則該怎麼處理。

如果要求處理一顆二叉樹的遍歷序列,則可以先找到二叉樹的根節點,再基於根節點把整棵樹的遍歷序列拆分成左子樹對應的子串行和右子樹對應的子串行,然後再遞迴地處理這兩個子串行。

劍指offer刷題

面試題6 從尾到頭列印鍊錶 struct listnode class solution reverse res.begin res.end return res 替換空格class solution int newnumstr numstr numspace 2 if newnumstr leng...

劍指offer刷題

原題鏈結 動態規劃 class solution dp for int i 1 i len1 i else if p j 1 else return dp len1 len2 原題鏈結 數學推導 找規律 class solution else if n 3 2 return ipow 3 numso...

劍指offer刷題 2

思路 如果從前往後進行遍歷,那麼每次找到乙個空格,則需要新增兩個位元組來進行替換,我們採用先對字串進行遍歷,查詢字串中的空格的個數,然後對新的字串進行長度的計算,然後從後往前進行替換,每遇到乙個空字元,然後進行替換。class solution int oldnumber 0 int numbers...