知识点概略
1. 学习了递归算法的时间复杂度的计算方法,master公式
注意master公式的应用条件 等规模的递归。
根绝log a(b)与N^d中d的比较有不同的时间复杂度的公式。
2. 学习了归并排序
归并排序是将数列的前后两部分排序,再使用合并,即merge方法将其合并在一起。
注意到merge方法与leetcode中合并两个有序链表的算法本质是一样的。
3.归并排序的复杂度
O(NlogN)
根据一中的master公式可得。a=2,b=2,d=1。
由master公式可得时间复杂度为O(NlogN)。
额外的空间复杂度为O(N),在merge合并时最大需要一个额外的等长的数组空间来存放值。
4.小和问题
小和问题指的是数组中每一个其左边比其小的数的和。暴力解法是简单地遍历数组,求每一个数的左边比其小的数的和。时间复杂度为O(N2)。
该问题可以转换为求每一个数右边有多少个比其大的数,若有n个数比a大,则要将a计入到小和中n次。即res+=a*n。
这样的情况下,可以利用merge合并的方法,利用O(NlogN)复杂度求得小和。