问题Maximum single-sell profit返回一对。如何构建任何子O(n ^ 2)算法来查找按利润排序的所有对?
实施例
values: scala.collection.immutable.Vector[Int] = Vector(1, 5, 10, -5, 0, -10, 15)
pairsAsc: Vector[(Int, Int)] = Vector((5,6), (3,6), (0,6), (0,2), (3,4))
gains: scala.collection.immutable.Vector[Int] = Vector(25, 20, 14, 9, 5)
答案 0 :(得分:2)
它是Sorting-X+Y-hard,因此期望o(n ^ 2 log n)-time算法(在一些合理的计算模型中)是不合理的。
给定数组x 1 ,... x n &gt; 0和y 1 ,... y n &gt; 0,让Z> max(x 1 ,... x n ,y 1 ,... y n )。让这个问题的输入是Z - x 1 ,...,Z - x n ,3Z + y 1 ,...,3Z + y <子>名词子>。所有X-X差异和Y-Y差异都小于Z.所有X-Y差异都大于Z.这样可以轻松过滤输出,解决原始问题。