def program2(L):
squares = []
for x in L:
for y in L:
if x == y:
squares.append(x*y)
return squares
根据我的最坏情况采取的步骤是4*n^2 + 2
,但这个问题的答案是4*n^2 + 2 + n
,解释如下
在最糟糕的情况下,L
是一个重复数字的长列表(即[2, 2, 2, 2, ...]
。在这种情况下,我们会在x
中浏览L
的循环每次通过这个循环,我们对变量x
执行一个值赋值,然后在y
n次执行L
的内循环。
内循环对变量y执行一个值赋值。然后每次都检查一个操作(如果x == y
)。由于WORST情况是列表由相同的元素组成,因此该检查始终为真 - 因此始终执行第三和第四个操作(x*y
和列表追加)。因此内循环在外循环的每次迭代中执行4*n
次。因此,嵌套循环结构执行n * (4*n + 1) = 4*n**2 + n
次!
添加两个步骤(对于第一个赋值语句和return语句),我们看到在最坏的情况下,该程序执行4*n**2 + n + 2
个步骤。
为什么我们要加+ 1(4n + 1)。无法理解这一点,因为没有执行的步骤是4n
(包括内部循环并且内部没有步骤)。
答案 0 :(得分:0)
对于内循环:
(4*n+1)
部分包括:
4*n
- >也就是说,每个y变量一次。
x==y
x*y
。squares
+1
部分指的是为内循环分配x
,完成n
次。
然后,在最后,添加已经提到的其余两个步骤:声明squares
并返回它。