由於要找工作,最近刷了點題,看了點書,做了些校招筆試,總結一些演算法筆試的要點吧。
1. 題目
筆試的時候,第一步還是要認真讀題,這個沒什麼好說的,題都不懂是做不下去的。
2. 解題思路
在讀完題目的時候,不要急著動手寫**。
這一步要做的是理清思路,可以借助畫圖等工具。
這一步的最終目標是得到演算法流程圖。
3. 輸入輸出
筆試的時候通常會有兩種型別,
一種是不需要輸入輸出,直接在函式引數中給出要處理的資料,然後通過返回值返回。
另外一種是需要輸入輸出,需要輸入輸出的又分為兩種:
1. 通過終端輸入輸出
2. 通過檔案輸入輸出
4. 資料結構
演算法筆試的時候通常要借助於一些常用的資料結構,比如:陣列/字串/鍊錶/樹/棧/佇列/雜湊表/集合等。
陣列和字串是兩種最基本的資料結構,它們分別用連續記憶體儲存數字和字元。
鍊錶和樹需要大量的指標操作,因此對指標操作要特別熟悉。
棧是乙個和遞迴緊密相關的資料結構。
佇列於廣度有限遍歷演算法相關。
5. 演算法
5.1 遞迴與迴圈
掌握遞迴的思想與執行流程,以及遞迴與迴圈之間的相互轉換。
常見的題目包括:1~n求和,漢諾塔問題,斐波那契級數列。
5.2 查詢
查詢無非就是順序查詢,二分查詢,雜湊表查詢,二叉樹查詢。
其中順序查詢,二分查詢都是按照一定的規則在原有的資料上進行查詢,
雜湊表查詢/二叉樹查詢是要構造乙個特殊的資料結構,因此需要額外的儲存空間。
5.3 排序
排序是演算法中最基本的乙個問題,因此各種演算法也比較成熟,
需要對各種演算法的思想/實現/複雜度/優化/穩定性爛熟於心。
常見的排序演算法包括:氣泡排序/選擇排序/插入排序/歸併排序/快速排序/堆排序/希爾排序等,其中插入排序、歸併排序、快排、堆排較為常用,要重點掌握。
5.4 貪心
5.5 分治
將現有問題劃分成若干不相關的子問題,分別求解。
5.6 動態規劃
將現有問題劃分成若干相關的子問題,
尋找子問題的最優子結構,尋找遞迴式。
採用自頂向下分析,自底向上的解法。
因為在子問題求解中,通常會有大量重複的計算,因此需要乙個額外的容器去儲存已經計算的值,比如hashmap,這樣就會減少一些重複計算。
常見的題目包括:
1維:青蛙跳台階,鋼條切割問題
5.7 回溯法
5.8 位運算
6. 測試用例
功能性測試:是否能達到題目的要求。
特殊輸入測試:比如空指標,輸入的是字串而不是數字等。
7. 提高**質量
8. 編碼風格
參考谷歌**風格
演算法0介紹 排序
是指解題方案準確而完整的描述,是一系列解決問題的清洗的指令,演算法代表著用系統的方法描述解決問題的策略機制.也就是說,能夠對一定規範的輸入,在有限時間內獲得所求的輸出.程式 演算法 資料結構 演算法的可行性與空前複雜度,時間複雜度 大資料下,犧牲精度換取速度.是一種儲存和組織資料的方式,意在便於訪問...
OpenGL教程 0 介紹
opengl介紹 opengl,全稱open graphics library,是乙個用c語言寫的圖形api。通俗地說,opengl用來繪製2d 3d圖形。目前opengl的運用十分廣泛,有許多用opengl編寫的優秀作品。opengl是乙個跨平台的圖形庫,也就是說它不僅可以在windows上使用,...
深度學習 0 介紹
人工智慧 讓機器具備人的思維和意識。人工智慧的三大學派 1.行為主義 基於控制論,構建感知 動作控制系統。2.符號主義 基於算術邏輯表示式,求解問題是先把問題描述為表示式,再求解。3.聯結主義 仿生學,模仿神經元連線關係。中心思想 當網路將大量簡單的計算單元連線在一起時,可以實現智慧型行為。機器學習...