315Count of Smaller Numbers After Self

来源:互联网 发布:mysql gtid原理 编辑:程序博客网 时间:2024/06/07 06:56

这题据说有2种做法,一是二叉搜索树。

我是基于 归并排序做的。 要求的是 每个数 比它右面多少个数要大。

那么假设 我 已经把一个数组分为两部分A B 显然A B内部每个数比自身右边多少个大已经递归求好了,那么关键就是合并。


刚开始走了弯路,试图按从小到大排序但是有问题,比如 a1,a2,a3  b1,b2,b3  假定a1<a2<a3 b1<b2<b3 如果有a1>b1 那么显然a2>b1 a3>b1 但是统计却非常困难,因为a1 a2 a3都需要加1个, 如果又有a1>b2 显然再得加一次,这样复杂度仍然是O(N^2)


后来想到,应该从大到小排序。比如a1>a2>a3 b1>b2>b3 如果a1>b1 我们就知道 这一轮 a1对应可以+3   然后如果a2<b1 那么再比a2>b2 就知道这一轮a2可以+2 由于归并时A在左B在右,因此仅有A里面的可能做加法。 而且从大到小排,保证A里面每个数仅加1次,也就做到了O(N)

0 0
原创粉丝点击