leetcode [315. 计算右侧小于当前元素的个数]

Posted BeicC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode [315. 计算右侧小于当前元素的个数]相关的知识,希望对你有一定的参考价值。

(https://leetcode-cn.com/problems/count-of-smaller-numbers-after-self/)

可以这样想:我们把nums数组中的数都放在数轴上,那么我们根据某个数,看他数轴前边有多少个数就可以得到对应的count,这样会存在三个问题:

问题一:怎么保证数轴前面的数都在nums[i]的右边

答:对nums数组进行从后往前遍历就行了

问题二:既然要把nums中的数分散到数轴中对应的位置,虽然我们可以用一个桶来代替数轴,但是如果nums中有一个数很大,我们这个桶就会变得很大,这样就会MLE,该怎么办?

答:因为nums数组不会很大,所以我们可以对数组进行离散化。这个也是我今天所学到的东西,什么叫离散化呢,官方题解中有一句话解释的非常到位:离散化的方法有很多,但是目的是一样的,即把原序列的值域映射到一个连续的整数区间,并保证它们的偏序关系不变。在普通的桶来代替数轴的过程中,下标与桶里存方的数是一样的,而我们可以稍微变化一下,将nums中不重复的数进行排序得到数组a,这样我们就得到了数与下标的一种关系,那么求nums中某个数的数轴下标就可以对a进行二分查找得到下标啦!

问题三:对于离散化后,我们得到了一个排列紧密的数轴,那么对于某个数,他在数轴的前缀和就是最后的答案,然后需要更新自己所在下边的数目,我们感觉得到,这个数组是在动态变化的,而我们要求多次动态数组的前缀和,可以想到树状数组,如果没有接触过树状数组,可以看这篇文章,我觉得写得很好:https://www.cnblogs.com/findview/p/11281628.html

当然这道题的第二种解法是归并排序加树状数组,原理都差不多,我只是把归并排序又写了一遍(懒)

以上是关于leetcode [315. 计算右侧小于当前元素的个数]的主要内容,如果未能解决你的问题,请参考以下文章

leetcode315 计算右侧小于当前元素的个数

leetcode 315 计算右侧小于当前元素的个数

Leetcode 315. 计算右侧小于当前元素的个数

leetcode [315. 计算右侧小于当前元素的个数]

题目地址(315. 计算右侧小于当前元素的个数)

题目地址(315. 计算右侧小于当前元素的个数)