假设我有一个列表,例如
x=[1,0,0,1,0,1,1,1,0,1,1,0]
。其中最长的连续1的子数组长度为3。我有一种O(n)的方法,但是否可以使用线段树在O(logn)内完成,并且如何实现呢?我正在练习基于线段树的问题,想知道如何解决这个问题并降低复杂度。a=[1,1,0,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0]
size=len(a)
counter=0
lis=[]
for _ in range(size):
if a[_]==1:
counter+=1
else:
lis.append(counter)
counter=0
print(max(lis))
O(n)
的时间。 - Patrick Haughl[n]
处得到了一个1
,则可以检查l[n+maximum]
。如果该值为0
,则知道l[n]
处的运行不大于maximum
,并且可以从l[n+maximum+1]
继续前进,跳过列表的一部分。如果l[n+maximum]
是1
,则必须从l[n+1]
继续前进。尽管如此,这仍然是一个O(n)
算法。 - Patrick Haugh