找工作算法准备1
2018-7-31日
1、不要忽视暴力解法
当没有很好的思路的时候 暴力解法无疑是最好的一种方法了,这种方法复杂度虽然很高 但是是一种思路
总比没有任何思路要好的多;在暴力解法的基础上在看看能不能优化
2、优化算法
-
2.1遍历常用的算法思路
-
索引指针遍历
-
递归分治
-
回溯算法
-
动态规划
-
贪心算法
-
-
2.2遍历常用的数据结构
-
栈
-
队列
-
堆
-
树
-
图
-
-
2.3空间和时间交换::哈希表
-
2.4预处理:排序
-
2.5极端条件下的判断
-
数组为空
-
字符串为空
-
数量为0
-
指针为空指针nullptr
-
-
变量名:模块化 复用性高;通俗易懂;
3、对一组数据进行排序
要思考是什么样的数组 数组具有什么特征
-
有没有大量重复----三路排序
-
是否大部分距离正确位置比较近--插入排序
-
是否有限 上下限----计数排序
-
是否要求稳定---归并排序
-
存储结构
-
链表归并;
-
数组快速排序;
-
4、时间复杂度
注意:大O是什么;在学术界上是表示上界;在业界表示最低的上界;
4.1一些基本的算法的时间复杂度
二分查找 logn
寻找数组中的最值 n
归并排序 快速排序 nlogn;
选择排序 n^2
4.2数据规模的概念
在1s内能够处理的解法的问题;
1、n^2的能够处理10^4的级别的数据
2、n的能够处理10^8级别的数据
3、nlogn能够处理10^7的级别的数据;
4.3递归算法的时间复杂度的分析
递归深度
多次调用
一次调用