1、二分查找法
是一种在有序数组中查找某一特定元素的搜索算法。
复杂度:
算法步骤:
先决条件:查找对象是有序数组
注意数据类型是有范围的,采用 L+(R-L)/ 2 表达式更合适
注意 L = m +1 、R = m - 1 ,防止死循环
适用范围:小数据量
常见面试变种:
- 查找第一个/最后一个与target相等的元素
- 查找最后一个小于target/第一个大于target的元素
- 查找最后一个小于等于target/第一个大于等于target的元素
- 数组的旋转(4,5,6,1,2,3)
2. 数组和链表
插入删除很少,查询非常多,又不会out of memory ,采用 数组。
如果是频繁的插入、遍历,查询检索很少,就采用 链表。
时间复杂度对比:
链表的插入/删除操作:
数组的插入/删除操作:
线性表的表示:
单向链表:
双向链表:
循环链表:
常见面试题:
3. 栈和队列
栈:先进后出(LIFO)
队列:先进先出(FIFO)
栈的操作:
队列的操作:
双端队列:
常见面试题:
栈的面试题:
4. 排序算法
选择排序:
冒泡排序:
插入排序:
希尔排序:
归并排序: