题解 | #活动安排#

活动安排

https://www.nowcoder.com/practice/16d971e9e42e4f3b9b1e2b8794796a43

from math import inf
import sys
from collections import deque

n = list(map(int, input().split()))[0]  # 活动数
arr = []
flag = []

for _ in range(n):
    arr.append(list(map(int, input().split())))

arr = sorted(arr,key=lambda x:x[1])


#贪心算法是可以被调度的活动中具有最早结束时间的那个
a0 = 0

#print(arr)
flag.append(0)
for j in range(1,n):
    if arr[j][0] >= arr[a0][1]:
        a0 = j
        flag.append(a0)

print(len(flag))

由于数组比较大,优先考虑只用一层循环

所以先排序,再去选择选择序列

排序的方法,用了sorted函数,我这个是表示按照第二列的数据从小到大排列

贪心算法就是从结束时间最短的那个活动开始,选择可以被调度的活动中最早结束的,因为已经按照结束时间排序了,所以只需要从头往后循环,找到的第一个能够被调度的活动其实就是最早结束的,然后把这个活动作为起点,再去比较。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务