拉勾网《32个Java面试必考点》学习笔记之六------数据结构与算法
2019-03-05 12:58
579 查看
本文为拉勾网《32个Java面试必考点》学习笔记.只是对视频内容进行简单整理,详细内容还请自行观看视频《32个Java面试必考点》.若本文侵犯了相关所有者的权益,请联系:txzw@live.cn.将会删除相关内容
数据结构与算法
算法 常用算法介绍 面试考察点 加分项 真题汇总
知识点汇总
知识点详解
数据结构
树
二叉搜索树
每个节点都包含一个值,每个节点至多有两棵子树,左孩子小于自己,右孩子大于自己,时间复杂度是O(log(n)),随着不断插入节点,二叉树树高变大,当只有左(右)孩子时,时间复杂度变为O(n).
平衡二叉树
保证每个节点左右子树高度差绝对值不超过1.
比如,AVL树在插入和删除数据是经常需要旋转以保持平衡.适合插入删除少场景.
红黑树
非严格平衡二叉树,更关注局部平衡,而非总体平衡,没有一条路径比其他路径长出两倍,接近平衡,减少了许多不必要的旋转操作,更加实用.
特点:
- 每个节点不是红就是黑
- 根节点是黑色
- 每个叶子都是黑色空节点
- 红色节点的子节点都是黑的
- 任意节点到其叶节点的每条路径上存在的黑色节点数量相同.
B树
适用于文件索引,优先减少磁盘IO次数,最大子节点称为B树的阶
m阶b树特点:
- 非叶子节点最多有m棵子树
- 根节点最少有两棵子树
- 非根非叶节点最少有m/2棵子树
- 非子叶节点保存的关键字个数,为该节点子树个数减一
- 非叶子节点的关键字大小有序
- 关键字的左孩子都小于该关键字,右孩子都大于关键字
- 所有叶节点都在同一层
- 采用二分查找法
B+树
定义与b树基本相同,
区别:
- 节点有多少关键字,有多少子树
- 关键字对应子树的节点都大于等于关键字,子树中包括关键字自身
- 所有关键字都出现在叶节点中
- 所有叶节点都有指向下一个叶节点的指针
- 搜索时只会命中叶节点,叶子节点相当于数据存储层,保存关键字对应的数据,非叶节点只保存关键字与指向叶节点的指针
B+树比B树更适合做索引:
- 叶节点之间有指针相连,B+树跟适合范围检索
- 由于非叶节点只保留关键字和指针,B+树可以容纳更多的关键字,降低树高,磁盘IO代价更低
- B+树查询过程稳定,必须由根节点到叶节点,所有关键字查询路径相同,效率相当.Mysql数据可得索引就提供了B+树的实现
B*树
在B+树的非叶节点上增加了指向同一层下一个非叶节点的指针
算法
字符串匹配问题
先于面试官交流,询问是否有其他要求
Example:判断给定字符串中的符号是否匹配 解题思路: 1. 使用栈 2. 遇到左括号入栈 3. 与右括号出栈,判断出栈括号是否成对
private static fianl Map<Character,Character> brackets = new HashMap<>(); static{ brackets.put(')','('); brackets.put(']','['); brackets.put('}','{'); } public static boolean isMatch(String str){ if(str==null){ return false; } Stack<Character> stack = new stack<>(); for(char ch : str.toCharArray()){ if(barckets.containsValue(ch)){ stack.put(che); } else if (brackets.contiansKey(ch)){ if(stack.empty() || stack.pop() != bracjets.get(ch)){ return false; } } } return stack.empty(); }
解题技巧
认真审题:
- 单模匹配还是多模匹配
- 时间复杂度空间复杂度是否有要求
- 明确期望的返回值,如,多匹配结果的处理
解题思路
- 单模匹配:BM,KMP算法
- 多模匹配:Tire树
- 前缀或后缀匹配
- 可以借助栈,树等数据结构
TopK问题
找出N个数中最小的k个数(N非常大)
解法:
- 用前K个数创建大小为K的大根堆
- 剩余的N-K个数与堆顶进行比较
时间复杂度:O(N*log(K))
优点:不用在内存中读入所有元素,适用于非常大的数据集
从N有序队列中找到最小的K个值
解法:
- 用N个队列的最小值组成大小为K的小根堆
- 取堆顶值
- 将堆顶值所在队列的下个值加入堆(与堆中最大值比较,若该值大于最大值则可停止循环)
- 重复步骤2,直到K次
时间复杂度:O((N+K-1)*log(K))
常用算法介绍
面试考察点
- 了解基本数据结构及特点 如,有哪些二叉树,各有什么特点
-
红黑树适合用搜索,B+数适合做索引
-
特别是快速排序和堆排序
-
如,BM使用后缀匹配进行字符串匹配
-
特别是时间复杂度
加分项
- 能够将数据结构与实际使用场景结合 如,介绍红黑树时,结合TreeMap的实现,介绍B+数时,结合Mysql中的索引实现
-
如,TopK算法在热门排序中的应用
真题汇总
- 各种排序算法的实现和复杂度,稳定性
- 二叉树的前中后序遍历
- 翻转句子中单词的顺序
- 用栈模拟队列(或用队列模拟栈)
- 对10亿个数进行排序,限制内存为1G 采用分治的思路
-
排序和hash两种思路
-
考虑使用深度优先算法
-
递归与非递归皆可实现
相关文章推荐
- 拉勾网《32个Java面试必考点》学习笔记之十------缓存(Redis与Memcache)
- 拉勾网《32个Java面试必考点》学习笔记之八------必会框架1️⃣一Spring全家桶
- 拉勾网《32个Java面试必考点》学习笔记之九------必会框架2️⃣一Netty与RPC与ORM
- 拉勾网《32个Java面试必考点》学习笔记之十二------架构演进与容器技术
- Java学习笔记(61)-----------40个Java集合面试问题和答案
- 【Java学习笔记】百度面试问题回顾(一)
- Android(java)学习笔记232:远程服务之 IPC 和 AIDL (面试常问)
- Java学习笔记-笔试考点
- java面试基础题,学习笔记!
- Java面试知识学习笔记1(2016/3/7)
- java程序员面试必备的32个考点
- [Java面试] java程序员面试必备的32个考点
- 数据结构与算法学习笔记(一):java实现二叉树构建,遍历
- 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
- 数据结构与算法 java版 学习笔记 第三章
- 黑马程序员—23—java面试:有关交通灯学习笔记和学习心得
- 黑马程序员—24—java面试:有关银行调度学习笔记和学习心得体会
- 学习笔记-JAVA-考点10-什么情况下需要重写equals和hashcode()两个方法?
- Java学习笔记——面试常客:写出一个死锁的例子
- Java面试知识学习笔记2(2016/3/8)