数据结构与算法经典问题解析-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:圆圈中最后剩下的数字

原文地址:https://www.cnblogs.com/youngao/p/13634996.html