備忘 公司筆試常考演算法重點簡介

2021-06-18 13:23:16 字數 914 閱讀 2112

一、資料結構方面:

一維資料結構: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節點之後的鍊錶進行反轉,得到乙個新鍊錶。再定義兩個引用,分別指向原煉表和新鍊錶的第乙個節點,然後遍歷鍊錶,從第乙個結點開始比較,如果兩個引用的值不一樣,那麼就不是回文。過程如下 所以...