如果不存在三个数字
a_i、a_j、a_k--其中a_i先成功a_j,然后又在序列中取代a_k,则数字序列是反标识的--比如a_i - a_j = a_j - a_k。例:(5,0,-1,3,1)不是止痛药,因为5-3 = 3-1,而序列(1,5,3,0,-1)是抗药的。
链接到卡蒂斯页。
我的尝试:
import sys
lines = sys.stdin.readlines()
lines = [x[:-1] for x in lines]
for line in lines:
if len(line) > 1:
line = line.split(':')
found = False
visited = {}
curr = line[1].split()
r = len(curr)
for i in range(r):
visited_2 = {}
if curr[i] in visited:
continue
else:
visited[curr[i]] = True
for j in range(i+1, r):
if curr[j] in visited_2:
continue
else:
visited_2[curr[j]] = True
tmp = int(curr[i]) - int(curr[j])
for k in range(j+1, r):
if int(curr[j]) - int(curr[k]) == tmp:
print("no")
found = True
break
if not found:
print("yes")
else:
break我相信我的尝试解决了找出一个序列是否是反算术的问题,因为我已经做了我自己的广泛的例子来测试这个问题。到目前为止,我的优化步骤是包括访问过的“节点”的字典,以便不重复搜索我们已经知道的不产生算术序列的数字。然而,这是不够快的卡蒂斯,所以我将非常感谢任何建议,如何改善这一点。
发布于 2019-07-20 07:40:43
使您的代码更难阅读:
else:”(通过返回、中断、继续传输执行)之后使用if进行不必要的缩进(在这里,您使用的是空的"if-parts":,您可以否定这些条件,只使用以前的else:-statements。再次问好,缩进。)https://codereview.stackexchange.com/questions/224483
复制相似问题