從一道面試題說開來

陳利人發表於2012-10-25

一道簡單的面試題,實際上是可以千變萬化的。我們通過下面的例子,啟示大家在練習的過程中,應該學會擴充思考,看看你自己能對一道題做哪些變換,怎麼提升。

面試題:給一個陣列和一個值,從陣列中刪除這個指定的值的所有出現,並且返回新的陣列的長度。

看似一道非常簡單的面試題,其實,我們可以進行各種的變換。讓我們來看幾個:

(一)給一個Template的定義,讓寫成Template function

size_t remove_elem(T* array, size_t len, T elem) {}

(二)如果刪除後要保持原來元素的順序,你的演算法是否滿足?

上面兩個是給題加更多的限制條件。

(三)任給一篇文章,其中的詞是空格隔開的,寫一個程式來刪除一個指定的詞的所有出現。

(四)設計一個類,用來處理檔案編輯。要求支援的操作有:插入,刪除,修改。其中有一個刪除操作時刪除一個指定詞的所有出現。怎麼實現這個類,並且實現這個刪除操作。

上面兩個是給出應用場景,實質沒變。

(五)給出一個字串,刪除某個字串的所有出現。要求最有的字串一定不能還出現這個字串。比如,從aababb中刪除ab字串,最後結果是空串。

這個是改變資料型別,同時可能遞迴刪除。

(六)給一個1T的整數檔案和100M記憶體的機器,怎麼刪除一個指定整數的所有出現。

這個是大資料量。

(七)一批資料分佈在多臺機器上,怎麼刪除一個指定的數的所有出現。

這個是考慮分散式計算。

(八)要求刪除的不是指定的數,而是刪除所有的子陣列,它們的元素的和等於指定的數。

因此,我們需要掌握題的精髓,然後靈活運用之。那麼,我們在練習面試題時,不應該只是完成和實現而已,我們應該做更多的思考,看看你自己還能想到哪些變化,還能怎麼提升它。

相關文章