算法:归并排序的用处

归并排序

将数组不断的一分为2,直到不能拆分为止,然后再合并,合并成为一个有序的队列即可。
归并排序的思想非常简单,但是归并排序用与排序却非常少,因为他有另一个非常有用的特性,也就是他合并前,第一个数组中所有的元素初始下标,都比第二数组的下标小,也就决定了它可以解决一些特殊的难题

难题一:求逆序对的个数

逆序对解释:数组中nums[i] > nums[j] 且 i < j。
这个正好符合归并排序在合并2个数组时,第一个数组的元素的下标肯定小于第二个数组所有元素的下标,那么在排序过程中,对于第二个数组中的元素,你是很容易找到第一个数组中比你大的元素的数量。累加这些数量就是返回结果。

难题二:区间和的个数

区间和:数组从下标 i 到 j 的元素之和。
这种题一般是求:区间和大小在某个范围内,这样的区间和有多少。
票眼一看,这和归并排序没半毛钱关系啊?
但是,区间和可以换一个视角,区间和[i,j] 就是前缀和 sum[j] - sum[i]( j > i)
好吧,这里就又设计到前后下标的事情了。
思路直接转换为:
2个已经排序好的数组求第二个数组中的元素,减去第一个数组中元素,范围在规定范围内的对数有多少,这个就相对容易多了

其他还有类似的题目,只有涉及到前后下标元素之间的计算,你就可以尝试一下归并排序时候有用。
有时候线段树树状数组可以用的情况,也可以尝试用归并排序处理。往往归并排序效率会更好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值