数据结构与算法
1.线性表
顺序存储方式:ArrayList
链式存储方式:LinkedList
2.栈和队列
栈:Vector ,Stack 先进后出,先进后出,插入删除都是栈顶操作
案列: 波兰表达式:中缀->后缀表达式
队列:Queue , LinkedList 双向链式存储结构
区别在于:linkedHashMap内部维护了一个双向链表
4.树
满二叉树,完全二叉树
二叉树遍历:
前序遍历:根->左->右
中序遍历:左—>根->右
后序遍历:左—>右->根
赫夫曼树原理
二叉树的put,delete操作
5.图
图的出度入读,广度遍历、深度遍历
图的最小生成树、普利姆算法,克鲁斯卡尔算法
图的最短路径、迪杰斯特拉算法
拓扑排序
6.算法
排序:选择排序
直接插入排序,二分法排序,希尔排序,堆排序
快速排序,归并排序,奇数排序
查找:二分法查找(递归,非递归)
递归:汉诺塔,欧几里得(最大公约数),阶乘
穷举:泊松分酒
贪心算法,分治算法(球队划分,棋盘覆盖)
回溯算法:寻找相似字符,棋盘排列,约瑟夫杀人法,大数相乘
- 算法练习
如何实现LRU算法
如何高效寻找素数
生产者消费者
viewGroup遍历
计算
给定一个数组,其值先递增后递减,找出不重复的值
所有的奇数在数组前部并从低到高排序,所有的偶数在数组后部并从高到低排序
大文件数据排序
合并n个有序链表
计算1+2*3/4
10个糖分给3个人
54张牌抽5张组成顺子
- 算法练习 - 高频面试系列 fucking-algorithm
如何实现LRU算法
如何高效寻找素数
如何计算编辑距离
如何运用二分查找算法
如何高效解决接雨水问题
如何去除有序数组的重复元素
2指针,快指针!=慢指针,就慢指针+1,且快指针赋值给慢指针+1后的值【有序链表同理】
如何寻找最长回文子串(回文子串:对称/正反一致)
2指针,左右指针分别加减,value[left]=[right],palindrome(s, i, i)/palindrome(s, i, i + 1)
string palindrome(string& s, int l, int r) {
// 防止索引越界
while (l >= 0 && r < s.size()
&& s[l] == s[r]) {
// 向两边展开
l--; r++;
}
// 返回以 s[l] 和 s[r] 为中心的最长回文串
return s.substr(l + 1, r - l - 1);
}
如何k个一组反转链表
如何判定括号合法性
如何寻找消失的元素
如何寻找缺失和重复的元素
如何判断回文链表
如何在无限序列中随机抽取元素
如何调度考生的座位
Union-Find算法详解
Union-Find算法应用
一行代码就能解决的算法题
二分查找高效判定子序列
备注:
- 时间复杂度:耗时的函数
- 空间复杂度:额外空间的函数
- 稳定性:相邻相等数值是否交换位置