算法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

题目信息

题号:8245
题型:简答题
知识点:Python
难度:普通