gpt4 book ai didi

algorithm - 如何在BIT中找到前缀和为M的位置?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:38 24 4
gpt4 key购买 nike

假设我创建了一个二叉索引树,其前缀和的长度为 N。主数组仅包含 01。现在我想找到哪个索引的前缀和为 M(这意味着恰好有 M 1)。

比如我的数组是 a[]={1,0,0,1,1};

前缀和看起来像 {1,1,1,2,3};

现在第 3 个索引(基于 0)的前缀和为 2。

如何用 BIT 找到这个索引?

提前致谢。

最佳答案

为什么不能对该索引进行二分查找?这将花费 O(log n * log n) 时间。这是一个简单的实现 -

int findIndex(int sum) {
int l = 1, r = n;
while(l <= r) {
int mid = l + r >> 1;
int This = read(mid);
if(This == sum) return mid;
else if(This < sum) l = mid+1;
else r = mid-1;
} return -1;
}

我使用了 read(x) 函数。那应该在 O(log n) 时间内返回区间 [1,x] 的总和。整体复杂度为 O(log^2 n)
希望能帮助到你。

关于algorithm - 如何在BIT中找到前缀和为M的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43223167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com