arrays - 查找数组中无序对的数量

标签 arrays algorithm dynamic-programming

我遇到了一个有趣的算法问题:

给定一个整数数组,找出该数组中无序对的数量,比如给定 {1, 3, 2},答案是 1,因为 {3, 2} 是无序的,对于数组 { 3, 2, 1},答案是 3 因为 {3, 2}, {3, 1}, {2, 1}.

显然,这可以通过 O(n^2) 运行时间的蛮力解决,或者置换所有可能的对,然后消除那些无效的对。

我的问题是,是否有人有更好的解决方案,您会怎么做,因为它看起来像是一个动态规划问题。一段代码会有帮助

最佳答案

使用平衡二叉搜索树可以在 O(n log n) 时间内解决这个问题。 这是该算法的伪代码:

tree = an empty balanced binary search tree
answer = 0
for each element in the array:
     answer += number of the elements in the tree greater then this element
     add this element to the tree

关于arrays - 查找数组中无序对的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26702051/

相关文章:

java - 如何避免在 Java 中由 math.random 数字创建的数组中创建重复项?

c - 将数组作为结构访问 *

algorithm - 使用 FLOOR 求解给定算法的递归方程

algorithm - 最优二叉搜索树仅针对特定顺序的键和频率对是最优的?

php - 修改数组中指定键的每一个值

javascript - 将 Javascript 构造函数数组从 PHP 发送到 Javascript

c++ - 为什么这段代码的排序算法不调用类的交换版本?

java - 如何根据 FirstName 和 LastName 生成唯一的 Id?

algorithm - 对整数列表进行分区以最小化它们的和的差异

algorithm - 给定一对点的数组,对它们进行排序,使终点与下一个点的起点匹配