题目描述
在某个项目中有多个任务(用task数组表示)需要你进行处理,其中:
- task[i] = [si, ei]
你可以在 si ≤ day ≤ ei 中的任意一天处理该任务,请返回你可以处理的最大任务数。
输入描述
第一行为任务数量 n
- 1 ≤ n ≤ 100000
后面 n 行表示各个任务的开始时间和终止时间,使用 si,ei 表示
- 1 ≤ si ≤ ei ≤ 100000
输出描述
输出为一个整数,表示可以处理的最大任务数。
用例1
输入
3
1 1
1 2
1 3
输出
3
说明
无
用例2
输入
5
2 3
1 4
2 4
1 5
2 5
输出
5
题目解析
本题可以采用贪心思维,思路是先把结束时间按照升序排序,结束时间相同时,则按照开始时间升序排序;安排任务时,依次 遍历排序好的任务,每个任务按时间升序检查该时间是否被占用,如没被占用,则将该任务安排在该时刻;将被占用的时间存入集合中,用于检测某时间是否已被占用。
代码
python
n=int(input())
mat=[]
for i in range(n):
tmp=list(map(int,input().split()))
mat.append(tmp)
#把结束时间按照升序排序,结束时间相同时,则按照开始时间升序排序
mat.sort(key=lambda x:(x[1],x[0]))
se=set() #存已分配的时间
for i in mat:
for t in range(i[0],i[1]+1):
if t not in se:
se.add(t)
break
print(len(se))
目录