gpt4 book ai didi

c++ - 回答对二进制数组的查询

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

给定一个长度为 <=10^5 的二进制数组和几乎相等的查询数。每个查询由两个整数(l,r)给出,对于每个查询我们必须计算连续01的总数在 [l,r] 范围内。

如果 n 是数组的长度,则 1 <= l < r <= n

例如:

如果二进制数组(1-indexed)是“011000”并且假设有 5 个查询:

1 3
5 6
1 5
3 6
3 4

那么要求的答案是

1
1
2
2
0

我知道这可以通过针对每个查询的线性时间(最坏情况)算法来解决,但由于查询数量众多,这是不可行的。

只是想知道实现此目标的最有效方法是什么?

最佳答案

对于每个查询,您可以使用 O(n) 空间复杂度和 O(log(n)) 搜索时间来完成。计算大小为 1、2、4、... 的窗口的计数。对于给定的查询,您可以找到 O(log(n)) 个窗口(最多 2 个特定大小的窗口),将其相加可以找到您的答案.

关于c++ - 回答对二进制数组的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841356/

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