以下代码的算法或性能改进

时间:2018-12-20 19:38:25

标签: python

我为面试准备网站中提出的问题之一编写了以下程序。我想知道这段代码是否有效,或者如果效率不高怎么办?

我的问题

编写一个函数,该函数需要一个整数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])

1 个答案:

答案 0 :(得分:0)

使用newmovietimes = set(movietimes),将时间减少到唯一时间的循环肯定会更有效,但这实际上是一个错误。如果有两部5分钟的电影,您可以在10分钟之内连续观看。

如果我正确理解您的代码,则无法解决全部问题;您应该从电影播放时间列表中找到两部电影,如果有多个组合满足约束条件,则全部提出。像(10, [4, 5, 6, 5])一样,您应该找到6 + 4和5 + 5的组合。

(最后,您只返回一个布尔值以表示是否找到了答案,因此您可以在找到答案后立即退出;但是如果需要,您的代码应该可以轻松扩展以查找所有排列-这就是解决之道完全是这样。)