《劍指offer》筆記 第6章(1)

2021-08-07 12:19:30 字數 2287 閱讀 3954

6.1面試官談能力

溝通能力:禮貌平和、不卑不亢、邏輯清晰、詳略得當地表達;發現問題並主動發問;

學習能力: 對做過的專案了解深入;對面試題快速尋找解決方法;

考查溝通能力:介紹過往專案;講解設計思路和**;

考查學習能力: 提問沒有接觸過的問題;看書;關注什麼;得到暗示後迅速做出反應並糾正;

6.2溝通能力和學習能力

溝通能力:

表達要邏輯清晰明了、語言詳略得當

不清楚的知識點用於承認,忌不懂裝懂

若要加入外企,提高英文交流能力,重點提高聽力

學習能力:

詢問最近看什麼書、做什麼專案、從中學到哪些新技術

拋出新概念如醜數,考查能否快速理解並應用新概念

不把問題描述清楚,考查是否能主動發問了解問題

針對面試題主動提出高質量的問題,展示溝通和學習能力

6.3知識遷移能力

考察方式:

把經典的問題做變換,期待應聘者將經典問題的思路遷移過來

先問乙個簡單的問題,再追問相關的複雜問題,期待應聘者將前者的思路遷移過來

平時準備:

總結每一道面試題的解法的特點,總結可應用到同類題目的思路

面試題53:在排序陣列中查詢數字

題目一:實現函式:輸入乙個陣列和乙個數字,求出數字在排序陣列中出現的次數。

測試用例:

功能測試:陣列中包含/不包含要查詢的數字;

陣列中要查詢的數字出現一次/多次

邊界測試:查詢陣列中的最大值、最小值;陣列中只有乙個數字;

特殊輸入:陣列中只有乙個數字;輸入陣列是null;

分析:

1.若用二分查詢,找到目標數字k,可能k的前面或後面也是k,於是在k處向左右兩邊順序掃瞄,找到第乙個和最後乙個k。這種方法,時間複雜度是o(n)(有n個數,k可能出現n次),和直接從頭到尾掃瞄一樣。 2.

關鍵問題是如何找到第乙個和最後乙個k,用二分法找; 3.

找第乙個k:如果陣列中間的數字比k小,則第乙個k在陣列後半部分;如果陣列中間的數字比k大,則第乙個k在陣列的前半部分;如果陣列中間的數字等於k,如果k前面乙個數字也是k,則那麼第乙個k在陣列前半部分,否則陣列中間的數是第乙個k; 4.

找最後乙個k:如果陣列中間的數字比k小,則第最後乙個k在陣列後半部分;如果陣列中間的數字比k大,則第最後乙個k在陣列的前半部分;如果陣列中間的數字等於k,如果k後面乙個數字也是k,則那麼第乙個k在陣列後半部分,否則陣列中間的數是第最後乙個k; 5.

找到第乙個和最後乙個k後,根據其下標計算出k出現的次數; 6.

這種方法的時間複雜度是o(logn)

題目二:找出0~n-1中缺失的數字:乙個長度為n-1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0~n-1內,在範圍0~n-1內的n個數字中有且只有乙個數字不在該陣列中,找出這個數字。

測試用例:

功能測試:缺失0;缺失n-1;缺失中間的數;

邊界測試:n=1,陣列中只有0或1;

特殊輸入:輸入陣列是null;

分析:

1.利用陣列是排序的這一條件,如果缺失m,則m之前的數字和其下標相等,從m開始數字和下標不等; 2.

利用二分法:如果中間元素和下標相等,則查詢後半部分;如果中間元素和下標不等,若前乙個元素和下標相等,則中間元素是第乙個數字和下標不等的元素,中間元素下標是缺失的數字;如果中間元素和下標不等,若前乙個元素和下標不等,則查詢前半部分;

題目三:陣列中數值和下標相等的元素:在乙個單調遞增的陣列中,每個元素唯一,找出陣列中任意乙個數值和下標相等的元素。如,數字3和其下標相等。

測試用例:

功能測試:陣列中不存在/存在數值和下標相等的元素;

邊界測試:陣列中只有乙個元素;數值和下標相等的元素位於陣列的開頭/結尾;

特殊輸入:輸入陣列是null;

分析:

1.如果第i個數字的值大於i,則它右邊的數字都大於對應的下標;如果第i個數字的值小於i,則它左邊的數字都小於對應的下標; 2.

二分查詢:如果陣列中間的數字大於i,則查詢左邊的數字;如果陣列中間的數字小於i,則查詢右邊的數字;如果陣列中間的數字等於i,則找到該數字;

二分查詢可用於在排序陣列中查詢特定的數字

《劍指offer》筆記 第4章(4)

面試題36 二叉搜尋樹與雙向鍊錶 輸入一棵二叉搜尋樹,將二叉搜尋樹轉換成乙個排序的雙向鍊錶,要求不能建立任何新的節點,只能調整樹中的節點指標指向。測試用例 功能測試 完全二叉樹 只有左 右子樹 只有乙個節點的二叉樹 特殊輸入 二叉樹根節點是null 分析 1.二叉樹中每個節點有兩個指標分別指向左子節...

《劍指offer》筆記 第5章(2)

面試題42 連續子陣列的最大和 輸入乙個整型陣列,陣列裡有正數也有負數。陣列中乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間複雜度是o n 例如,陣列為,和最大的子陣列為,輸出位18。測試用例 功能測試 陣列中有正數也有負數 陣列中只有正數 陣列中只有負數 特殊輸入 陣列為nu...

《劍指offer》筆記 第5章(5)

面試題50 第乙個只出現一次的字元 題目一 實現函式,找出字串中第乙個只出現一次的字元,如 abaccdeff 輸出b 測試用例 功能測試 字串所有字元都出現多次 字串中所有字元都出現一次 字串中存在只出現一次的字元 特殊輸入 字串為null 分析 1.從頭掃瞄字元,拿到乙個字元後,與其後面的字元比...