1-1
对一组数据进行排序:
可以用快速排序O(nlogn),但是只能证明会快排,但忽略了使用环境。
(1)所以可以和面试官探讨:
1、这组数据有什么样的特征,比如是否包含大量重复元素,如果有那么三路排序更好,如果所有的排序都是独特的那普通的就好了。(很多语言的标准库都是三路快排)。
2、是否大部分数据距离他的正确位置很近?是否近乎有序?比如对银行近期发生的数据进行排序大多数这样就是近乎有序,处理这样的数据插入排序更好。
3、是否数据取值范围有限?比如学生成绩排序,这样计数排序更好。
4、比如是否需要稳定的排序,那么归并更好。
5、数据存储状况是怎么样的?快排依赖于数据的随机存取特征,如果数据是链表存储的,快排就不适用了,归并更好。
6、数据大小是否足以存储在内存中?需要使用外排序算法
(2)正确还包括对问题的独到见解,优化,代码规范,容错性
1-3
不要轻视基础算法与数据结构,而只关注有意思的题目
1、各种排序算法
2、基础数据结构和算法的实现:如堆,二叉树,图
3、基础数据结构的使用:如链表、栈、队列、哈希表、图、Tire、并查集
4、基础算法:深度优先、广度优先、二分查找、递归
5、基本算法思想:递归、分值、回溯搜索、贪心、动态规划
1-4
解决算法面试的整体思路
1、注意题目中的条件:给定有序数组(二分查找),题目中的暗示设计O(nlogn)的算法(分治法),数据规模大概10000
2、没有思路的时候,给自己几个简单的测试用例
3、不要忽视暴力解法,通常是思考的起点
4、优化算法:遍历常见的算法思路,遍历常见的数据结构,空间和时间的交换(哈希表),预处理信息(排序),在瓶颈处寻找答案(O(nlogn)+O(n^2) --> O(n^3))
5、编写实际问题:极端条件判断(空指针,字符串为空,数量为0,指针为null),变量名,模块化,复用性