我为面试准备网站中提出的问题之一编写了以下程序。我想知道这段代码是否有效,或者如果效率不高怎么办?
我的问题
编写一个函数,该函数需要一个整数flight_length(以分钟为单位)和一个整数movie_lengths(以分钟为单位)列表,并返回一个布尔值,指示在movie_lengths中是否存在两个数字,其总和等于flight_length。
构建函数时:
假设您的用户将观看两部电影 不要让用户观看同一部电影两次 通过内存优化运行时
def movie_length(fligh_length,movietimes):
newmovietimes =[]
for time in movietimes[0::]:
if time not in newmovietimes:
newmovietimes.append(time)
else:
print("movie times are equal")
if fligh_length == sum(newmovietimes):
return print("you can watch")
else:
return
print("you can't watch")
movie_length(11,[8,2])
答案 0 :(得分:0)
使用newmovietimes = set(movietimes)
,将时间减少到唯一时间的循环肯定会更有效,但这实际上是一个错误。如果有两部5分钟的电影,您可以在10分钟之内连续观看。
如果我正确理解您的代码,则无法解决全部问题;您应该从电影播放时间列表中找到两部电影,如果有多个组合满足约束条件,则全部提出。像(10, [4, 5, 6, 5])
一样,您应该找到6 + 4和5 + 5的组合。
(最后,您只返回一个布尔值以表示是否找到了答案,因此您可以在找到答案后立即退出;但是如果需要,您的代码应该可以轻松扩展以查找所有排列-这就是解决之道完全是这样。)