【发布时间】:2012-03-10 13:12:19
【问题描述】:
我遇到了一个问题,即在整数数组中查找每个元素左侧的较小元素的数量,这可以通过使用 二叉索引树在 O(nlgn) 中解决(如 AVL 等)或 合并排序。使用 AVL 树可以计算每个元素的左子树的大小,这将是必需的答案。但是我想不出如何有效地计算每个元素留下的较小元素的 sum。对于每个元素,我是否必须遍历左子树并对节点处的值求和,还是有更好的方法(使用合并排序等)?
例如对于数组:4,7,1,3,2 所需的答案是:0,4,0,1,1
谢谢。
【问题讨论】:
-
最后一个答案不应该是
1吗?另外,您能否描述一下如何使用 AVL 树解决计数问题?我不清楚。 -
谢谢..更正。对于计数问题,在添加任何元素时,它会与 root 进行比较,如果小于则添加到左侧,否则添加到右侧。因此,对于任何节点,其左子树的大小都会给出比它小的元素数。
-
是的,这样您就可以计算比它小的项目数。但它们不仅限于左侧的项目。哦,也许现在我明白了:您在插入东西后立即数较小的项目,而不是在最后,对吧?