- 面試題11:旋轉數組的最小數字
方法:設兩個指針,分別位於數組的開頭和結尾,若開頭的數小於結尾的數,直接返回開頭數,否則找到中間的數,若中間數大於開頭數,範圍縮小到中間數到結尾數,若中間數小於開頭數,則範圍縮小到前半部分,若相等則直接return該段的最小值,如此反覆,直到兩個指針指向兩個相鄰的元素,循環結束,返回第二個指針指向的元素。
- 面試題12:矩陣中的路徑
方法:回朔法,
- 面試題13:機器人的運動範圍
方法:回朔法
- 面試題14:剪繩子
方法一:從下往上遞歸,先得到f(2),f(3),再得到f(4),f(5),再f(n)
方法二:貪婪算法,儘可能多的剪出長度爲3的繩子,當剩下事4的時候,剪成2*2的繩子
- 面試題15:二進制中1的個數
方法一:與運算,先用1與上給定的數字,然後1左移,問題是需要而且確定要移幾次
方法二:把一個數減去1,再與原整數做與運算,會把該整數最右邊的1變成0,所以統計可以做多少次這樣的運算
相關題目:
- 面試題16:數值的整數次方
方法:很簡單需要注意細節,指數是負數的時候先取證再倒數,爲0的情況單獨考慮
- 面試17:打印從1到最大的n位數
方法:大數問題,需要用字符串表示數字,相當於n個空位將0到9全排列
- 面試題18:刪除鏈表的節點
方法一:找到要刪除節點的前節點,指向要刪節點的下個節點,n
方法二:將要刪節點的下個節點的內容複製到要刪節點的位置,將要刪節點的指針指向下下個節點
都要考慮要刪除的節點是尾節點以及頭節點的情況
- 面試題19:正則表達式匹配
方法:情況過於複雜,分情況討論,用到了遞歸
- 面試題20:表示數值的字符串
方法:
return
re.match(r
"^[\+|\-]?[0-9]*(\.[0-9]*)?([e|E][\+\-]?[0-9]+)?$"
,s)