首页 > 解决方案 > 查找编号按顺序出现

问题描述

我需要找出给定的数字是否存在于给定的序列中。数列是公差为2的算术级数

例如输入 1 - 5, 7, 9, 11, 13, 15, . . . 因为这个序列键是 19,所以它存在于序列输出中。对于 input2 - 是 4,6,8,10... 给定键是 15,所以它不存在,输出应该是 False。我已经编写了代码,但它仅适用于奇数的第一组输入。它对于偶数的 input2 失败

arr = 4,6,8
n=10
b=max(arr)
l=[]
if b>n:
    c=b
else:
    c=n
d=arr[1]-arr[0]
for i in range(1,c+d+1,d):
    l.append(i)
if n in l:
    print("True")
else:
    print("False")

输出 1 - 真输出 2 - 假

标签: python-3.x

解决方案


您可以利用range的智能实现__contains__来获得单线 O(1) 解决方案:

print(6 in range(2, 10, 2))
# True
print(5 in range(2, 10, 2))
# False

还有一个极端的例子来展示它的速度和可扩展性(大小range无关紧要):

from timeit import Timer

print(min(Timer(lambda: 1_000_000_000 in range(2, 1_000_000_003, 2)).repeat(1000, 1000)))

# 00032309999999990957

推荐阅读