Algorithm 数据结构,该结构可以有效地添加新编号,并计算存储的编号比某个查询编号小多少
我想找到一个能够处理以下用例的高效数据结构 我可以向该数据结构添加新元素,例如。 我调用Algorithm 数据结构,该结构可以有效地添加新编号,并计算存储的编号比某个查询编号小多少,algorithm,data-structures,Algorithm,Data Structures,我想找到一个能够处理以下用例的高效数据结构 我可以向该数据结构添加新元素,例如。 我调用add()API,add([2,3,4,5,3]),然后这个数据结构存储[2,3,3,4,5]。我可以查询一些目标并返回比该目标小多少个数字。e、 g.query(4),返回3(因为一个2和两个3)。调用add和query的频率顺序相同 首先,我想到了段树,然而,输入的数字可以是int值中的任何人,空格将是O(2^32) 您能给我一些关于我应该使用哪种数据结构的建议吗?您可以使用,这是一种二叉搜索树,其中每个
add()
API,add([2,3,4,5,3])
,然后这个数据结构存储[2,3,3,4,5]
。我可以查询
一些目标
并返回比该目标小多少个数字。e、 g.query(4)
,返回3
(因为一个2
和两个3
)。调用add
和query
的频率顺序相同
首先,我想到了段树
,然而,输入的数字可以是int
值中的任何人,空格将是O(2^32)
您能给我一些关于我应该使用哪种数据结构的建议吗?您可以使用,这是一种二叉搜索树,其中每个节点还存储自己子树的基数。插入顺序统计树仍然需要O(logn)时间,因为它是一个二元搜索树,尽管插入操作稍微复杂一些,因为它必须保持每个节点的基数为最新
计算少于给定目标的成员数也需要O(logn)时间;从根节点开始:
- 如果目标小于或等于根节点的值,则在左子树上递归
- 否则,返回左子树的基数加上右子树上递归的结果
基本情况是,对于空子树,总是返回0。太棒了!非常感谢你。