C++ 二进制数组的查询应答
给定一个长度的二进制数组,您可以使用空间复杂度和每个查询的Ologn搜索时间来完成。计算大小为1、2、4…的窗口的计数。。。。对于给定的查询,您最多可以找到两个特定大小的Ologn窗口,求和即可找到您的答案。正如Dukeling在评论中所说,您可以在On中预处理以计算数组B,其中B[x]包含[1..r]中看到的连续数字总数 这允许O1中的查询通过使用数组计算[1,r]范围内的总数并减去[1,l]范围内的数字来查找[l,r]范围内的连续位数 Python代码:C++ 二进制数组的查询应答,c++,arrays,algorithm,intervals,C++,Arrays,Algorithm,Intervals,给定一个长度的二进制数组,您可以使用空间复杂度和每个查询的Ologn搜索时间来完成。计算大小为1、2、4…的窗口的计数。。。。对于给定的查询,您最多可以找到两个特定大小的Ologn窗口,求和即可找到您的答案。正如Dukeling在评论中所说,您可以在On中预处理以计算数组B,其中B[x]包含[1..r]中看到的连续数字总数 这允许O1中的查询通过使用数组计算[1,r]范围内的总数并减去[1,l]范围内的数字来查找[l,r]范围内的连续位数 Python代码: def preprocess(A):
def preprocess(A):
last=A[0]
B=[0,0]
num_consecutive=0
for a in A[1:]:
if a==last:
num_consecutive+=1
B.append(num_consecutive)
last=a
return B
def query(B,l,r):
return B[r]-B[l]
A=[0,1,1,0,0,0]
B=preprocess(A)
print query(B,1,3)
print query(B,5,6)
print query(B,1,5)
print query(B,3,6)
print query(B,3,4)
这闻起来像家庭作业。你自己也试过吗?@Bojangles:我可以向你保证,这不是一个家庭作业,也不像看上去那么琐碎。我已经更新了我的答案。我不明白你在找什么。以最后两个查询为例。范围[3,6]中的元素是000。有三个连续的零,那么为什么答案是2?范围[3,4]中的元素是0。有一个连续的零,那么为什么答案是0?作为旁注-从查询中,看起来范围是[l,r],而不是[l,r.这不太难-在设置时间,O1查询,但我想先看看你们方面的尝试。@Dukeling:我知道这不太难,只是我不明白:/