小编Om *_*rma的帖子

由"1"组成的最长子阵列的长度

假设我有一个列表说.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)

python algorithm python-2.7 python-3.x

7
推荐指数
1
解决办法
406
查看次数

有序的一对数字

对于给定的数字,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)

python algorithm math optimization python-3.x

5
推荐指数
1
解决办法
482
查看次数

美丽的序列

如果此序列的每个元素都可被整除,则整数序列很漂亮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)

python algorithm python-3.x

2
推荐指数
1
解决办法
421
查看次数

标签 统计

algorithm ×3

python ×3

python-3.x ×3

math ×1

optimization ×1

python-2.7 ×1