【备忘】公司笔试常考算法重点简介
一、数据结构方面:
一维数据结构: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