我为面试准备网站上的一个问题编写了以下程序。我想知道这段代码是否有效,或者如果效率不高我们如何改进
我的问题
编写一个函数,该函数采用整数flight\ u length(以分钟为单位)和整数movie\ u length(以分钟为单位)的列表,并返回一个布尔值,指示movie\ u length中是否有两个数字的和等于flight\ u 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])
使用
newmovietimes = set(movietimes)
将时间减少到唯一时间的循环肯定更有效,但实际上这是一个bug;如果有两部5分钟的电影,你可以在10分钟内连续观看如果我理解正确,你的代码并不能解决全部问题;您应该从电影时间列表中找到两部电影,如果有多个满足约束的组合,请将它们全部提出。就像
(10, [4, 5, 6, 5])
你应该找到6+4和5+5的组合(最后您只返回一个布尔值来表示是否找到了答案,因此您可以在找到答案后立即退出;但是,如果需要的话,您的代码应该可以很容易地扩展以找到所有的排列—这就是完全解决这个问题所需要的。)
相关问题 更多 >
编程相关推荐