算法21可直接使用Python的列表设计算法。21·假
算法21可直接使用Python的列表设计算法。
21·假设用一个线性表记录某地区每年的平均气温,以研究全球气候变暖的趋势。研究者发现,气温的变化是有一定的规律的。如:线性表L=(3, 4, 6, 4, 5, 7, 5)记录了连续7年的平均气温,从第一年开始,按照+1,+2,-2的规律变化,然后又按照+1,+2,-2这样的规律变化,我们称这个表中存在一个长度为3的温度变化环。又如:(1, 10, 13, 45, 48, 57, 60, 92,95, 104, 107)存在一个长度为4的环+9,+3,+32,+3.设计算法求解线性表中这个环的长度。
答案
def find_cycle_length(L): """ L:气温线性表列表 返回温度变化环的长度 """ n = len(L) if n <= 2: return 0 # 1.计算相邻差值diff数组 diff = [] for i in range(1, n): diff.append(L[i] - L[i-1]) m = len(diff) # 枚举可能环长k:1~m for k in range(1, m+1): match = True # 检查每一个位置i是否满足 diff[i] == diff[i % k] for i in range(m): if diff[i] != diff[i % k]: match = False break if match: return k return m # 测试用例1 L1 = [3,4,6,4,5,7,5] print(find_cycle_length(L1)) #输出3 # 测试用例2 L2 = [1, 10, 13, 45, 48, 57, 60, 92, 95, 104, 107] print(find_cycle_length(L2)) #输出4