您的位置:首页 > 编程语言 > Python开发

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

2017-03-09 10:58 411 查看
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)
#第一步,判断是否存在公差d1
if d1*(N-1) != (max1-min1):#判断是否整除,验证是否存在公差d1
print('不存在公差d1,不是等差数列')
#第二步,判断公差是否为0
elif 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,'不是等差数列')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python
相关文章推荐