查找最大的连续段Aritmetic级数

时间:2019-10-21 14:08:58

标签: algorithm math

  • 给出一个整数范围,例如A = [a1,a2,a3,a4,... aN]和一个共同的差 D
  • 我必须在上面找到长度最大的连续数字段 数组,该数组形成具有共同差D的算术级数。
  • 给出的示例A = [2,3,5,7,9,12,14,18]共同差D = 2
  • 最大为[3,5,7,9],长度= 4。

首先,我尝试使用蛮力检查来完成每个可能的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)

1 个答案:

答案 0 :(得分:1)

这个问题比“最长递增连续子序列”简单得多,一个原因是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