Python习题:Python 判断是不是等差数列,要求算法时间复杂度为O(NlogN)

来源:互联网 发布:佛山网络推广方法 编辑:程序博客网 时间:2024/05/19 04:02

Python习题:Python 判断是不是等差数列,要求算法时间复杂度为O(NlogN)
知乎原帖:
https://zhuanlan.zhihu.com/p/23134333#comments
评论中答案总结及测试正确的修改代码如下:
1. 验证成功,但是原理上不会证明
注意 python3中/为浮点数除法,返回浮点数,//为整数除法,返回整除结果

A=[2,3,4]N=len(A)min1=min(A)max1=max(A)d1=(max1-min1)//(N-1)print(d1)#第一步,判断是否存在公差d1if d1*(N-1) != (max1-min1):#判断是否整除,验证是否存在公差d1    print('不存在公差d1,不是等差数列')#第二步,判断公差是否为0elif d1==0:#如果d1为0,则也是等差数列,但是d1不能作为被除数    print('数列元素相同,是等差数列')else:    B=[0]*N    for i in A:        j=(i-min1)//d1        if d1 * j != (i-min1):#判断是否整除,即任意数之差是否是公差的整数倍            print(False, '不是等差数列')            break        else:            B[j]=1            print(B)#观察过程    if sum(B)==N:        print(True,'是等差数列')    else:        print(False,'不是等差数列')
0 0