这一篇博客主要是对面试过程中经常问到的一些算法题型做一个总结,后面会有几篇专门的文章对每一个类型的算法进行总结。
总结:
有几个题很相似,但是解决的方法不同:
1.topk问题,
例如:海量数据中找第k个大的数——类排序,外部排序
求数据流的中位数——类排序,最大堆最小堆
2.树的遍历,镜像,相同
树的层次遍历
树的镜像判断
树的相同判断
3.链表快慢指针的遍历
链表环的寻找
链表倒数k的节点的选择
4.字符串重复的问题
寻找非重复的字符——分治+异或
寻找第一个非重复的数组——队列+次数表
寻找第一个重复的字符——bitmap表
字符串的排序,去重——bitmap表
5.队列,栈的互相转换
两个队列转换成为一个栈
两个栈转换成一个队列
栈最小值操作
6.动态规划
最大子数组
斐波拉契
丑数
圆圈删除数字
n个鸡蛋从m层楼上扔下来,确定k次即可辨别零界点
http://blog.youkuaiyun.com/wolinxuebin/article/details/47057707
给50个硬币,面值可以不同,排成一排,两个人轮流取,只能从两端取,先取的人如何保证取到的币值大于等于另一个人。
f[i][j]=max(num[i] + sum[i+1][j] - f[i+1][j] , num[j] + sum[i][j-1] - f[i][j-1])
f[i][j]表示从i到j取的最大和
sum[i][j]表示从i到j的和
7.全排列问题
8.回溯法
迷宫
数字寻找路线
9.搜索算法trie+topk问题
http://blog.youkuaiyun.com/stormbjm/article/details/12752317
10.倒排索引
https://www.cnblogs.com/zlslch/p/6440114.html
全排列问题
给出几个数,求这些数的全排列,首先从数学上我们可以分析,全排列就是An的可能性,那么如何做呢?
使用的思路就是交换,首先将第一个元素固定,然后去递归第二个元素之后的全排列
注意每次将第一个元素和后面一个元素固定,然后去递归,递归完成了之后将其交换回来,在进行其它的交换
相似的问题:
1,八皇后问题
2.矩阵面值相等的问题
小结:
这些问题都是首先求出所有的全排列,然后给出这些数字排列的约束条件,从约束条件中选出我们题目给定的要求。