leetcode315. 计算右侧小于当前元素的个数(Python3)

本博客介绍了如何利用归并排序解决LeetCode315问题,即计算数组中每个元素右侧有多少个比它小的元素。通过将数组拆分、排序和合并的过程,同时更新每个元素右侧小于它的数量,最终得到所需结果。
摘要由CSDN通过智能技术生成

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

给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。

示例:

输入: [5,2,6,1]
输出: [2,1,1,0] 
解释:
5 的右侧有 2 个更小的元素 (2 和 1).
2 的右侧仅有 1 个更小的元素 (1).
6 的右侧有 1 个更小的元素 (1).
1 的右侧有 0 个更小的元素.

方法:归并排序

思路:

本题类似于面试题51.数组中的逆序对。使用归并排序的方法。

归并排序就是逐渐的将两个排序好的子数组进行合并,最后将整个数组排序。我们的排序进行降序排序。比如示例[5,2,6,1],首先分成两个[5,2]和[6,1],这两个子数组都可以继续分,分为[5]、[2]和[6]、[1],不可继续分了,结束递归,开始向上合并,[5]、[2]合并为[5,2],[6]、[1]排序为[6,1];继续合并为[6,5,2,1],结束排序。

那么,归并排序这个过程,和我们右侧小于当前元素个数有什么关系呢,我们以合并[5,2]和[6,1]的时候为例。

因为我们进行排序之后,nums中的位置都改变了,而我们最后需要返回的是nums的原来位置对应的右侧小于该元素的数量。因此我们定义一个数组numsarr,每个元素为[nums[i],i],即保存nums每个元素的值和其原来的坐标。维护res数组,res[i]保存nums[i]的右侧小于该元素个数。

在归并排序过程中,我们需要更新某个点对应的右侧小于该元素数量时,设该点为temp,temp保存的为值和对应的坐标。则此时更新res[temp[1]]即可。最后归并排序结束之后,返回res即可,具体的归并排序过程细节见代码。

代码:

class Solution:
    def count
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值