1.对一组数据进行排序
根据数据的特征要求分析具体算法
1 含有大量重复元素
推荐三路快排
注:很多语言的标注库中快排的基本实现都是三路快排【包括java】
2 数据都是独特的
推荐常用的快速排序
注 :快排非常依赖数组的随机存储
3 数据几乎有序【正确位置较近】
推荐插入排序
【例】银行事务处理的数据(几乎先发生先完成)
4.数据的取值范围非常有限
推荐计数排序
【例】学生成绩排序
5.是否需要稳定排序
推荐归并排序
6.数据存储使用链表存储
推荐归并排序
7 .内存小了,不足装入内存
推荐外排序算法
准备范围
1.不要轻视基础算法数据结构,只关注新颖特殊的题目
选择合适的OJ
online judge
在线判题系统
推荐leetcode
HackerRank
在学习和实践做题之间,掌握平衡
解决面试问题的整体思路
1.注意条件
【例】给定一个有序数组。。。。【二分查找】
【例】设计一个O(nlogn)的算法 【大概率分治法】
【例】无需考虑额外的空间【开辟额外的空间】
【例】数据规模大概是10000【设计O(n^2)的算法】
没有思路的时候
写几个测试用例,试验一下
不要忽视暴力解法。暴力法是思考的起点
【例】