最长算术-Python版
题目描述
一个算术数组是指至少包含两个整数,且相邻整数之间的差值都相等的整数数组。
例如,[9、10],[3、3、3] 和 [9、7、5、3] 是算术数组,而 [1、3、3、7],[2、1、2],和 [1、2、4] 不是算术数组。
Sarasvati 有一个包含 N 个非负整数的数组,其中的第 i 个整数为 Ai。
她想从数组中选择一个最大长度的连续算术子数组。
请帮助她确定最长的连续算术子数组的长度。
样例
4
7
10 7 4 6 8 10 11
4
9 7 5 3
9
5 5 4 5 5 5 4 5 6
10
5 4 3 2 1 2 3 4 5 6
输出样例
Case #1: 4
Case #2: 4
Case #3: 3
Case #4: 6
解题思路
思路描述
- 首先最短的子序列肯定是2
- 下标为
j
;只需要判断[j - 1]
-[j]的值和[j]
-[j + 1]
的值是否相等- 若相等,则计数+1
- 若不相等,则计数重置为0,并把计数结果添加到答案数组中
- 此处应注意减号两边的顺序不要写反。
- 最后按格式输出答案数组中的最大值即为答案。
解题代码(Python)
n = int(input())
for i in range(1, n + 1):
m = int(input())
ls = list(map(int, input().split())) # 读取控制台输入的数据并形成列表
c = 2 # 定义最长子序列初始化计数
a = 2 # 最长子序列
t = ls[1] - ls[0]
for j in range(1, m - 1): # 循环并判断是否满足条件
if ls[j - 1] - ls[j] == ls[j] - ls[j + 1]:
c += 1
else:
if c > a: # 如果计数值大于最长子序列值,则替换最长子序列的值
a = c
c = 2
if c > a: # 补充判断,防止未进入else语句
a = c
print(f'Case #{i}: {a}')