华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
为了庆祝中国共产党成立100周年,某公园将举行多场文艺表演,很多演出都是同时进行,一个人只能同时观看一场演出,且不能迟到早退,由于演出分布在不同的演出场地,所以连续观看的演出最少有15分钟的时间间隔。
小明是一个狂热的文艺迷,想观看尽可能多的演出,现给出演出时间表,请帮小明计算他最多能观看几场演出。
第一行为一个数N,表示演出场数,1 <= N<=1000,接下来N行,每行有被空格分割的两个整数;
第一个整数T表示演出的开始时间,第二个整数L表示演出的持续时间;
T和L的单位为分钟,0 <=T <=1440, 0 <= L <= 100
输出最多能观看的演出场数。
package com.guor.od;
import java.util.*;
public class OdTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 演出场数
int N = sc.nextInt();
List<int[]> timeList = new ArrayList<>();
for (int i = 0; i < N; i++) {
// 演出的开始时间
int T = sc.nextInt();
// 演出的持续时间
int L = sc.nextInt();
int endTime = T + L;
timeList.add(new int[]{T, endTime});
}
Collections.sort(timeList, new Comparator<int[]>() {
public int compare(int[] a, int[] b) {
if (a[1] == b[1]) {
return b[0] - a[0];
} else {
return b[1] - a[1];
}
}
});
int startTime = timeList.get(0)[0];
// 最多能观看的演出场数
int max = 1;
for (int[] time : timeList) {
// 开始时间
int curStartTime = time[0];
// 结束时间
int curEndTime = time[1];
// 连续观看的演出最少有15分钟的时间间隔
if (startTime - curEndTime > 15) {
max++;
// 重置开始时间
startTime = curStartTime;
}
}
System.out.println(max);
}
}
3
100 120
240 150
400 100
2
下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。