数据结构与算法经典问题解析-Java语言描述
第一章 绪论
两个主定理:
其时间复杂度为O(nlogn)
1 问题21与问题22对比可以发现:
问题规模减小和递归求解主定理中f(n)必须要是正的方可,否则不能直接套定理,只能用数学带入法求解。
2 问题34
对T(n)=2T(n/2)+cn 时间复杂度的求解,参考算法导论一书
根据上面求解思路可得出:T(n)=T(n-1)+T(n-2)+c的时间复杂度为O(2^n)
利用树结构,可知树的深度为n,这棵树是一个满二叉树所以叶子节点的数目为2^n,每个叶子节点花费O(1)的运行时间,那么最终的时间复杂度为O(2^n)
3 问题39
对T(n)=T(0.8n)+O(n)这个和前面的递归是不同的,并没有对T(n)进行拆分,仍是单纯的一条链路因此可以提出:T(n)=0.8T(n)+O(n),那么其时间复杂度为O(n)
4 问题40
对T(n)=aT(√n)+b这种,一般假设n=2m转换成主定理的形式再求解
第三章 链表
1 Floyd判圈算法证明:
2 利用数组下标和元素创建链表:leetcode 287. 寻找重复数
思路:当前数组元素既是当前节点的值也是下一节点元素的索引位置
3 约瑟夫环:参考剑指offer:圆圈中最后剩下的数字