例子: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'的累加和。这仅需要遍历一次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)中运行?
方法1:对于每个i,只需搜索A并总结小于或等于A[i]的数字。粗略地说,这需要遍历A n次,因此它将花费O(n^2)时间。
方法2:将A排序以获得A',然后只需找到A'的累加和。这仅需要遍历一次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)中运行?