在不使用数组的情况下,我们可以通过先对原始序列排序,再根据等差数列的性质,逐一遍历所有可能的等差数列进行求和,并记录最长的等差数列的和作为结果返回。
代码示例:
def longest_arithmetic_sequence_sum(sequence):
n = len(sequence)
if n < 3: # 序列长度小于3时,任意两个数都是等差数列
return sum(sequence)
sequence.sort()
max_length = 2 # 等差数列最小长度为2
cur_length = 2 # 当前等差数列长度,默认为2
diff = sequence[1] - sequence[0] # 等差数列差值
cur_sum = sequence[0] + sequence[1] # 当前等差数列和
max_sum = cur_sum # 最长等差数列和
for i in range(2, n):
if sequence[i] - sequence[i-1] == diff: # 如果当前数可以加入到当前等差数列
cur_sum += sequence[i]
cur_length += 1
if cur_length > max_length: # 如果当前等差数列长度大于已知的最长等差数列长度
max_length = cur_length
max_sum = cur_sum
else: # 如果当前数无法加入到当前等差数列
diff = sequence[i] - sequence[i-1]
cur_length = 2
cur_sum = sequence[i-1] + sequence[i]
return max_sum
使用示例:
>>> longest_arithmetic_sequence_sum([1,2,3,4,5])
15 # 最长等差数列为 [1,2,3,4,5]
>>> longest_arithmetic_sequence_sum([10,7,4,1,-2])
-4 # 最长等差数列为 [10,7,4,1,-2]
>>> longest