假设我有一个列表说.x=[1,0,0,1,0,1,1,1,0,1,1,0]这个连续1的最长的子数组长度为3.我有ao(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))
Run Code Online (Sandbox Code Playgroud) 对于给定的数字,N找到总可能的有序对(x,y),使得x和y小于或等于n,并且x的数字之和小于y的数字之和
例如n = 6:有21可能的有序对[(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 3), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5), (4, 6), (5, 6)]
这里x总是小于y,x的数字之和也小于y的数字之和,x和y都等于或小于N.这是我天真的方法,但这很慢,并且工作正常,直到N = 10000之后它表现不佳.
from itertools import permutations
n=100
lis=list(range(n+1))
y=list(i for i in permutations(lis,2) if i[0]<i[1] and sum(list(map(int,
(list(str(i[0]))))))<sum(list(map(int,(list(str(i[1])))))))
print(len(y))
Run Code Online (Sandbox Code Playgroud)
一个使用发电机
from itertools import permutations
for _ in range(int(input())):
n=1000 …Run Code Online (Sandbox Code Playgroud) 如果此序列的每个元素都可被整除,则整数序列很漂亮4.您将获得一个序列a1, a2, ..., an.在一个步骤中,您可以选择此序列中的任意两个元素,将其从序列中删除并将它们的和附加到序列中.-1如果不可能,计算使给定序列美观的最小步骤数.
for i in range(int(input())):
n=int(input())
arr=list(map(int,input().split()))
if((sum(arr))%4)!=0:
print(-1)
continue
else:
counter=[]
for i in range(n):
if arr[i]%4!=0:
counter.append(arr[i])
else:
continue
x=sum(counter)
while(x%4==0):
x=x//4
print(x)
Run Code Online (Sandbox Code Playgroud)
我的方法:如果数组的总和不能被整除,4那么如果数组mod的总和4等于零,则数组不能是美丽的我计算数组中的元素,其中mod由4不等于零并附加他们在列表中,然后找到列表的总和,并将总和除以4,直到它的商模数4不等于零.我在这里做错了什么?
编辑:我有一个运作良好的工作脚本
for i in range(int(input())):
n=int(input())
arr=list(map(int,input().split()))
count1=0
count2=0
count3=0
summ=0
for i in range(n):
x=arr[i]%4
summ+=x
if x==1:
count1+=1
if x==2:
count2+=1
if x==3:
count3+=1
if (summ%4)!=0:
print(-1)
continue
else:
if count2==0 and count1!=0 and count3==0:
tt=count1//4
print(3*tt)
if count2==0 …Run Code Online (Sandbox Code Playgroud)