一、資料結構方面:
一維資料結構:set,array,queue,stack,linked list.
特性(如set不允許重複元素)、stack先進後出、queue後進先出,linked list的各種姿勢(雙向、單向、迴圈)……
常考問題:
1、找出乙個單鏈表中的中間節點
快慢指標為最優解法,即兩個指標、乙個p=p->next 另乙個p=p->next->next,第二個p,while不出來到頭了,第乙個也就出來了。
2、單鏈表查環
同上3、刪除非尾結點的倒數第k個節點
4、刪除指定節點(不能真刪,把k後的元素往前覆蓋了就行了)
二維資料結構:樹、圖
1、圖:最小生成樹、判斷成環、拓撲排序
2、樹:二叉查詢樹、平衡二叉查詢樹、trie,堆,b樹
常考問題:
1、top-k問題,用堆來做。
2、依賴項查詢:環判斷、再複雜的話用並查集
二、演算法方面:
不會考太奇葩的,主要還是:
sort(快排、堆排很重要!!)
dp、貪心、分治之類的
小公司看sort,大公司看dp!當然,也看sort。。。。
例題:揹包、字串增刪改dp、hdu poj上兩顆星的dp題,不用太優化。
字串:kmp/bm,lcs/lis,字串dp……還有一些水**的題就不說了
三、語言特性方面(這裡發c++的):
記憶體機制、template、stl、boost、loki(我這種水acmer可能除了stl都有點拙計= =)
四、一些從經典的東西派生出來的新的事物:
hash->bloom filter,bitmap,桶,mapreduce(和hadoop鏈結起來)...大資料神馬的
五、各種奇葩智商拙計的腦筋急轉彎orz
常考排序演算法
演算法思想 氣泡排序與快速排序屬於互換類的排序方法。氣泡排序是通過相鄰資料元素的交換逐步將線性表變成有序。基本過程為 首先,從表頭開始掃瞄線性表,在掃瞄的過程中逐次比較相鄰兩個元素的大小。若前面元素大於後面元素,則將它們互換消去乙個逆序。然後,從後到前掃瞄剩下的線性表,同樣在掃瞄過程中比較兩個元素的...
常考煉錶筆試題(一)
1 刪除鍊錶中等於給定值 val 的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5 思路 要刪除鍊錶中等於給定值的所有節點,我們可以定義乙個結果鍊錶,再結合尾插的方法來實現。定義乙個last引用,指向結果鍊錶的最後乙個節點,cur引用指向給定鍊錶的第乙個節點。...
常考煉錶筆試題(三)
1 判斷是否是回文 思路 判斷乙個鍊錶是否是回文結構,我們可以先找到這個鍊錶的中間節點middle,然後將middle節點之後的鍊錶進行反轉,得到乙個新鍊錶。再定義兩個引用,分別指向原煉表和新鍊錶的第乙個節點,然後遍歷鍊錶,從第乙個結點開始比較,如果兩個引用的值不一樣,那麼就不是回文。過程如下 所以...