2、链表
2,1、解题技巧
- 利用快慢指针(有时候需要用到三个指针)
- 链表的翻转
- 寻找倒数第k个元素
- 寻找链表中中间元素
- 判断链表是否有环
- 构建一个虚假的链表头
- 两个排序链表,进行排序整合
- 将链表的奇偶数按原定顺序分离,生成前半部分为奇数,后半部分为偶数
2.2、如何训练该技巧
在纸上或者白班上画出节点之间的互相关系画出修改的方法
凭空想象是比较困难的
画在白班上,还能让面试官清楚的看到思路
3、栈
3.1、栈特点
- 后进先出
3.2、算法基本思想
- 可以用一个单链表来实现
- 只关心上一次的操作
- 处理完上一次的操作后,能在O(1)时间内查找到更前一次的操作
4、队列
4.1、队列特点
- 先进先出
4.2、常用场景
- 广度搜索
5、双端队列
5.1、常用场景
实现一个长度动态变化的窗口或者连续区间
6、树(重点掌握)
6.1、树的共性
- 结构直观
- 通过树问题来考察递归算法掌握的熟练程度
对于树的性质,往往要求每个节点都必须满足
- 在定义二叉搜索树时,没个节点都必须是二叉搜索树
- 求二叉树的深度
6.2、面试中常考的树的形状有
- 普通二叉树
- 平衡二叉树
- 完全二叉树
- 二叉搜索树
特殊的树:红黑树(不要了解)
6.3、常考
遍历(递归与非递归写法)
- 前序 遍历(在树里搜索,以及创建一颗新的数用到)
- 中序遍历(
二叉搜索树
,此时访问到的顺序就是元素的顺序)- 后序遍历 (当需要修改左右子节点,修改叶子节点时,收集的信息从底部到跟时)
7、优先队列
(实现比较繁琐,在解决面试哦中的问题时,实行拿来主义即可)
本质
二叉堆的结构,利用一个数组结构来实现完全二叉树
扫描二维码关注公众号,回复: 10288660 查看本文章
基本操作
- 向上筛选
- 向下筛选
`时间复杂度:O(logk)
另一个重要的时间复杂度:优先队列的初始化 时间复杂度o(n)
特点
与普通队列的区别
保证每次取出的元素是队列中优先级最高的
优先级别可自定义
最常用的场景
从杂乱无章的数据中按照一定的顺序(或者优先级)筛选数据
* 给定一个数组,找到前k个大的数
* 求前k个高频元素
* 关键如何定义优先级