活动安排
问题描述:给很多电影的开始和结束时间,看每个电影之间需要间隔3分钟,返回看尽可能多的电影的个数。编写函数max_num_movies(movie_list),movie_list 是(start_time, end_time) 元组。
样例:
movie_times = [ (299, 330), (250, 350), (280, 297), (340, 360), (360, 380), (300, 337) ] print(max_num_movies(movie_times))
输出:3
贪心规则:优先安排最早结束的电影
样例解释:按照安排最早结束的电影排序,选中(280, 297),开始点变为297+3=300,再选中(300, 337),开始点变为337+3=340,再选中(340, 360),开始点变为360+3=363结束。
(280, 297), (299, 330), (300, 337), (250, 350), (340, 360), (360, 380),
参考代码:
def max_num_movies(movie_list):
#优先安排最早结束的活动
if movie_list == []:
return 0
result = []
ans = []
for start, end in movie_list:
item = end, start
result.append(item)
sorted_list = sorted(result)
ans.append(sorted_list[0])
j = 0
for i in range(1, len(sorted_list)):
if sorted_list[i][1] >= sorted_list[j][0]+3:
ans.append(sorted_list[i])
j = i
return len(ans)
movie_times = [
(299, 330),
(250, 350),
(280, 297),
(340, 360),
(360, 380),
(300, 337)
]
print(max_num_movies(movie_times))