• 算法:归并排序的用处


    归并排序

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

    难题一:求逆序对的个数

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

    难题二:区间和的个数

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

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

  • 相关阅读:
    spring的循环依赖
    【docker】docker的基础命令
    Hadoop HDFS 高阶优化方案
    Java刷题面试系列习题(十一)
    torch.cat 使用小节
    HTTPS的实现原理
    一款针对EF Core轻量级分表分库、读写分离的开源项目
    国产大模型各自优势如何?大家都怎么选?
    11. IOC容器的加载过程
    golang基础复合类型—map
  • 原文地址:https://blog.csdn.net/yuanyuneixin1/article/details/127721643