【算法】贪心

活动安排

问题描述:给很多电影的开始和结束时间,看每个电影之间需要间隔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))

 

你可能感兴趣的:(算法)