如何在最短的時間內搞定數據結構和演算法,應付面試?

必須要掌握哪些數據結構和演算法,哪些可以先放一放


面試中經常考到的知識點如下:

演算法部分

二分搜索 Binary Search
分治 Divide Conquer
寬度優先搜索 Breadth First Search
深度優先搜索 Depth First Search
回溯法 Backtracking
雙指針 Two Pointers
動態規劃 Dynamic Programming
掃描線 Scan-line algorithm
快排 Quick Sort

數據結構部分

棧 Stack
隊列 Queue
鏈表 Linked List
數組 Array
哈希表 Hash Table
二叉樹 Binary Tree
堆 Heap
並查集 Union Find
字典樹 Trie

刷題可以幫助你快速回顧、理解上述知識,如果你想要應對面試,你需要分兩個時間段進行不同目的的刷題。以國內面試求職為例:

  • 前一年12-3月份:廣泛刷題,你需要做的是把Lintcode 上的題目至少70%的題目刷兩遍,做到60%的題目bug free。題目的標準答案,你可以在 Lintcode參考答案查詢 上找到。
  • 3-8月份:有針對性地刷題,你需要做的是把 Lintcode階梯訓練 上的精選題目刷一遍,尤其是要刷 IT企業技術面試模擬模擬試題 ,最好是反覆刷,從中摸索出IT企業的面試套路。

歡迎關注我的微信公眾號:九章演算法(ninechapter),幫助你了解IT技術前沿,通過面試、拿到offer、找到好工作!


個人覺得應付面試抖基礎的話:

數據結構:二叉樹&>散列表&>棧&>隊列&>堆&>一般樹&>圖&>其他

演算法:二分法&>冒泡&>快速排序&>加密演算法&>其他排序演算法&>隨機數的演算法&>其他

因為一般公司需求和面試題應該都是按這個優先順序來的,

備註

1。這不應該是你的學習路線,比如冒泡排序的效率並不是很高,但是很多地方面試喜歡問,

2。也要看你面試的職位的工作重點,比如和資料庫和io有關的,隊列優先順序會大於二叉樹等。

個人意見 僅供參考


LeetCode Online Judge

十分後悔沒有早點刷,一年前面MSRA的時候是人生第一面,演算法答的很不好。估計就這個被拒了

之後刷OJ時,發現:尼瑪這不就是我面MSRA/百度/intel的演算法題么= =


數據結構我覺得從鏈表開始學,各種對鏈表的操作熟練了以後,看二叉樹,各種操作熟練了,棧和隊列也基本沒問題了,圖的話,我覺得短時間搞不定;演算法找本書,隨便一本書,看目錄,講到什麼學什麼;然後就是一些比如位操作的東西,不一定常用,但有時考。以上的過程可以同步做leetcode,裡面已經分類好了,還可以練代碼的熟練度

這是我學了一點皮毛之後的感受,希望對題主有幫助


最近刷了大半的劍指offer,感覺還是受益匪淺的,它不單是演算法題集,還教會你一些優秀的編碼習慣,力薦!看了書之後,你會來感謝這個答案的


去leetcode上刷題,如果對數據結構和演算法不是很熟的話,按AC率由高到低刷,以題帶動基礎數據結構和基本演算法思想的學習,同時結合《劍指offer》,刷一遍的話應該能夠應付找實習了,多刷幾遍的話應該能夠應付國內大部分互聯網公司的面試,就光演算法寫題這塊兒。演算法這個東西還是認真刷題才是王道啊!


本來看到以為是問「如何掌握數據結構和演算法」,雖說問題很爛俗但是依然有回答的動力。

但是點進來才看到「應付面試」,感覺就沒動力了。

應付面試,刷LeetCode就好了,最標準的面試題庫,高中難度,正著刷反著刷來幾遍。


cracking the coding interview


我現在是國內某IT公司的實習生,談談我的實習面試經驗吧。

公司對實習生的要求不是很高,考察的也都是一些比較基礎的問題,我大概在面試前2個月開始在Lintcode上面刷題,在刷題之餘惡補我的項目。

我在面試中碰到了幾道數據結構和演算法面試題,都是Lintcode上easy或者medium難度的題目,所以我的建議就是如果時間不是很充分的情況下,刷一刷Lintcode上medium難度以下的題目就夠了。以下是我碰到的相關題目,一共是4道,分別是在電面、第一、第二輪技術面中遇到的:

電面:

超級丑數。

題目:http://www.lintcode.com/zh-cn/problem/super-ugly-number/

參考答案:http://www.jiuzhang.com/solution/super-ugly-number/

第一輪技術面:

最近公共祖先。

題目:http://www.lintcode.com/zh-cn/problem/lowest-common-ancestor/

參考答案:http://www.jiuzhang.com/solutions/lowest-common-ancestor/

跳躍遊戲。

題目:http://www.lintcode.com/zh-cn/problem/jump-game/

參考答案:http://www.jiuzhang.com/solutions/jump-game/

第二輪技術面

鏈表排序。

題目:http://www.lintcode.com/zh-cn/problem/sort-list/

參考答案:http://www.jiuzhang.com/solutions/sort-list/

我的面試很順利,很快就拿到實習offer了,多動動手對應對面試還是很有效的~


首先必須對概念型的東西有所了解,了解一些基本數據結構和演算法設計策略等知識單元,熟悉數據結構的知識與應用、計算機演算法的設計與分析方法,主要內容包括線性表、樹、圖和廣義表、演算法設計策略以及查找與排序演算法等。最好可以自己編個小程序熟悉一下理論與實踐的差異。不過可能需要時間會稍微長點,最好是在網易找類似課程學習,這類的課程很多。自己找吧!祝你順利通過!


推薦閱讀:

如果按國家分,哪個國家編程最厲害?有沒有代表人物?
如何解釋召回率與準確率?
你有哪些時候能力突然增強?說明例子和進行原因分析?
0x5f3759df這個快速開方中的常數的數學依據是什麼?
學了一點 C 語言,下一步應該學什麼?

TAG:演算法 | 程序員面試 | 互聯網公司 |