資料結構和演算法在程式設計師面試中的重要性不言而喻,也是一大難點。不過回答這類問題是有一些技巧的。
按照題意先列出前幾項或者舉一些特定的例子,從而分析總結其中的一般規律。(找規律)
平時多刷點leetcode,劍指offer,可以按照標籤刷題,發現某種型別的題目的特徵和相似性。
遇到複雜的演算法題,可以先把它簡化,例如改變一下資料型別或空間大小,先嘗試解決簡化後的問題,再根據這個思路套用到複雜的問題中。
很多問題可以逐層分解,最後歸納為一些最簡單的問題。首先解決最基本的情況,然後以此為基礎解決接下來的問題。(如求全排列問題)
問題的規模越小,越容易直接求解。
分治法就是將乙個難以解決的大問題分割成一些規模較小的相關問題。
分治法一般包括三個步驟:
(1)分割問題(分割的小問題最好有相等規模)
(2)對這些小問題求解(常用遞迴)
(3)合併這些小問題,得到原始問題的解
很多面試題要求演算法盡可能高效(即時間複雜度小)。
要想時間複雜度低,比較簡單的方法是犧牲空間,用空間換取時間。
而用空間換時間的最有效的方法是hash法。
對於涉及大規模資料處理的演算法設計題,hash法是較好的方法。
(若對空間也有要求就別用這個了…另想辦法)
實在不知道用什麼方法解決,就乙個個排除所有可能,常考的資料結構和演算法就那麼多,總能找到適合解題的方法。
(1)資料結構:鍊錶、陣列、二叉樹、樹、堆(大頂堆,小頂堆)、棧、佇列、向量、hash表
(2)演算法:dfs和bfs、遞迴、二分查詢、排序(歸併、快排等)、樹的插入/刪除/查詢/遍歷、圖論、hash法、分治法、動態規劃
(3)概念:位操作、設計模式、記憶體管理(堆、棧)
面試筆試中的排序問題
快速排序 include include define n 100 using namespace std int a n void quicksort int l,int r a x num if l x quicksort l,x if x r quicksort x 1,r int main ...
Java面試筆試常遇到的問題
for int j 0 jarray i 1.繼承類不同 a hashmap繼承 abstractmap b hashtable繼承dictionary 2.執行效率不同 a hashmap是非執行緒安全的,是hashtable的輕量級實現,效率較高 b hashtable是執行緒安全的,效率較低 ...
面試,筆試常問的8種排序演算法
經常碰到這樣一類排序問題 把新的資料插入到已經排好的資料列中。將第乙個數和第二個數排序,然後構成乙個有序序列 將第三個數插入進去,構成乙個新的有序序列。對第四個數 第五個數 直到最後乙個數,重複第二步。如何寫寫成 首先設定插入次數,即迴圈次數,for int i 1 i設定插入數和得到已經排好序列的...