首页 > 解决方案 > 找到最大的连续段算术级数

问题描述

首先,我尝试使用蛮力检查每个可能的 con-sub 数组来执行它。但是大型阵列需要很长时间


def ap(test,d):
    l=len(test)
    if l==1:
        return True
    elif l>1:    
        for i in range(l-1):
            if test[i+1]-test[i]!=d:
                return False
                break
        else:
            return True
arr=list(map(int,input().split()))
d=int(input()) # common diff
length=0
for i in range(n):
    for j in range(i+1,n+1):
        if ap(arr[i:j],d):
            lon=len(arr[i:j])
            if lon>length:
                length=lon
print(length)

标签: algorithmmath

解决方案


这个问题比“最长递增连续子序列”更简单,因为 1)你有差异,2)你需要连续的子数组

所以遍历数组一次就足够了,检查当前的邻居对是否需要差异并在为真时增加进展长度

for i in range(1, len(A)):
    if A[i]-A[i-1] == d:
         curlen += 1
         maxlen = max(maxlen, curlen)
    else 
         curlen=1

推荐阅读