2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)
题目描述
在某个项目中有多个任务(用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
题目解析
本题可以采用贪心思维,思路是先把结束时间按照升序排序,结束时间相同时,则按照开始时间升序排序;安排任务时,依次 遍历排序好的任务,每个任务按时间升序检查该时间是否被占用,如没被占用,则将该任务安排在该时刻;将被占用的时间存入集合中,用于检测某时间是否已被占用。
代码
c++
#include <bits/stdc++.h>
using namespace std;
bool cmp(vector<int> a, vector<int> b) {
if(a[1]!=b[1]) {
return a[1]<b[1];
}else{
return a[0]<b[0];
}
}
int main() {
int n;
cin>>n;
vector<vector<int>> mat(n,vector<int>(2));
for(int i=0;i<n;i++) {
cin>>mat[i][0]>>mat[i][1];
}
//把结束时间按照升序排序,结束时间相同时,则按照开始时间升序排序