我正在codefights.com上练习编码。这是一个链接,可以看到他们要求的内容:link。我很难理解这些返回语句在下面的代码中真正做了什么。
我的代码:
def avoidObstacles(inputArray):
for i in range(1, max(inputArray)):
divs = any([x for x in inputArray if not x%i])
if not divs:
return i
return max(inputArray) + 1
我不明白return max(inputArray) +1
如何给出正确答案。
例如:
inputArray = [5,3,6,7,9]
应返回“4”。
如果有人能一步一步地指导我,我真的很感激。 谢谢!
答案 0 :(得分:1)
我将尝试将代码可视化以显示其工作原理:
pipeline {
agent {
kubernetes {
//cloud 'kubernetes'
label 'mypod'
containerTemplate {
name 'maven'
image 'maven:3.3.9-jdk-8-alpine'
ttyEnabled true
command 'cat'
}
}
}
stages {
stage('Run maven') {
steps {
container('maven') {
sh 'mvn -version'
}
}
}
}
}
你可以想象这些是跳跃长度。您可以看到跳跃长度为" 1"将击中每一个障碍,但跳跃长度为" 2"只能击中6号障碍物。
关于第4跳的注意事项,数组中没有任何内容。这是>>> for i in range(1, max(inputArray)):
... print("hop " + str(i),[x for x in inputArray if not x%i])
...
('hop 1', [5, 3, 6, 7, 9])
('hop 2', [6])
('hop 3', [3, 6, 9])
('hop 4', [])
('hop 5', [5])
('hop 6', [6])
('hop 7', [7])
('hop 8', [])
关键字的来源,基本上是这样的True / False:
any
您可以看到代码在>>> for i in range(1, max(inputArray)):
... print(any([x for x in inputArray if not x%i]))
...
True
True
True
False
True
True
True
False
,i == 4
时执行,因此您将触发此逻辑:
divs == False
但是,如果每一个单跳都遇到障碍物而你永远不会有if not divs:
return i
,那么答案就是跳过整个事情!在这个问题"整个事情"是divs == False
答案 1 :(得分:1)
def avoidObstacles(inputArray):
for i in range(2, max(inputArray)):
quantity = 0
for x in inputArray:
if x % i == 0:
break
quantity +=1
if quantity == len(inputArray):
return i
return max(inputArray) + 1
在 inputArray 中,避免障碍的最小步长为2,最大可以为最大数,为什么循环是for i in range(2, max(inputArray))
对于 inputArray 中的每个元素,我检查其是否除以 step (循环中的变量 x ),如果没有,则增加数量加1。如果 quantity 等于 inputArray 的长度,例如 inputArray 中的none元素不除以 step ,因此需要 step 。如果此循环为空,则需要返回 max(inputArray)+ 1 作为最小的可行步骤,以避免所有障碍。