示例:A = [4, 1, 3, 2, 3, 3]。然后我们会得到 B = [16, 1, 12, 3, 12, 12]。
方法1:对于每个i,只需搜索A并总结小于或等于A[i]的数字。粗略地说,这需要遍历 A n 次,因此需要 O(n^2) 时间。
方法2:对A排序得到A',然后只需找到A'的cumsum。这只需要穿过 A' 一次。所以总的运行时间就是排序,O(n log n)。
但是,当有关系时,这不起作用。对于上面的例子,我们得到 A' = [1, 2, 3, 3, 3, 6],所以 cumsum(A') = [1, 3, 6, 9, 12, 16],不一样作为B(排序)。
有没有办法解决这个问题,使它仍然在 O(n log n) 中运行?