引言算法题,无外乎两类:
一类考对基本算法实现的掌握,另一类考运用算法解决实际问题。
第一类:
排序:
快排、归并排序、堆排序怎么实现的?
查找:
有序数组的二分查找、二叉查找树怎么实现的、红黑树是什么?
字符串:
KMP会吗?
鄙人不才,只能想到算法世界里的冰山一角。这些基本算法的实现过程中的思想,需要掌握!最好能用自己的话讲明白。
第二类:
运用数据结构解决实际问题。这种题目有两个考察点:
1、找到一种解决问题的算法
2、实现这种算法,需要用到哪些数据结构?如果你是个JAVA程序员,这些数据结构你能灵活使用吗?
有以上这种感触是在我做了一道扫描线的问题之后。这道题的算法不难,但是找到算法后,运用哪种数据结构呢?自己实现会很耗费时间,所以要做到这两点:
1、熟练掌握常用数据结构的特点,比如堆是一种优先队列的实现你知道吗?
2、熟练掌握编程语言中,数据结构对应的实现是什么?比如你知道JAVA中用PriorityQueue实现了堆吗?
如果你想更精通算法与数据结构,你还需要做到:
熟悉编程语言中对数据结构的实现采用了何种算法,性能怎么样
路漫漫其修远兮~,所以接下来进入正题,介绍常用的解题思路
贪心当我们求解一个问题时,如果能最大化利用我们当前获得的信息,得到当前情况下的最优解,那么当我们迭代完所有的已知条件后,最后的结果就是我们想要的。
堆堆又名“优先队列”,可以加入元素(因为是队列),也可以返回最值(体现优先)
当你的解题思路中,需要:将元素加入队列中暂存、将队列中的最值元素取出来,可以考虑使用堆这种数据结构!
DP
递归
Trie
分治
数学题
逻辑题
KMP
栈
BFS完