一、题目描述
为庆祝中国共产党成立100周年,某公园将举行多场文艺汇演,很多演出都是同时进行。
一个人只能同时观看一场演出,且不能迟到早退。由于演出分散在不同的演出场地,所以连续观看的演出最少要有15分钟的时间间隔。
小明是一个狂热的文艺迷,想观看尽可能多的演出。
现给出演出时间表,请帮助小明计算他最多能观看几场演出。
二、输入描述
第一行为一个数N,表示演出场数,1 <= N <= 1000。
接下来的N行,每行两个空格分割的整数,第一个整数T,表示演出开始时间,第二个整数L,表示演出持续时间。
T和L的单位都是分钟,1 <= T <= 1440、1 <= L <= 180。
三、输出描述
请输出最多能观看的演出场数。
四、解题思路
- 将输入的每一行的开始时间和持续时间,改造为开始时间+结束时间,添加到集合timeList中,方便比较;
- 对timeList按照开始时间排序;
- 如果开始时间相同,则按结束时间排序,这样可以尽可能的看更多的场次;
- 定义一个变量能观看的演出数sum;
- 顺序第一的第一场演出是必看的,然后从第二场演出开始遍历;
- 比较当前演出的开始时间和上一场的结束时间,看是否大于15;
- 如果大于等于15,则可以观看,sum++;
- 如果小于15,则无法观看当前场次;
- 再用上一场的结束时间,去和下一场的开始时间比较,看是否大于等于15,以此类推;
- 输出可以观看的场次sum;
五、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 演出场数
int n = Integer.valueOf(sc.nextLine());
// 将输入的每一行的开始时间和持续时间,改造为开始时间+结束时间,方便比较;
List<Integer[]> timeList = new ArrayList<Integer[]>();
for (int i = 0; i < n; i++) {
int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
Integer[] timeArr = new Integer[2];
// 演出开始时间
timeArr[0] = nums[0];
// 演出结束时间
timeArr[1] = nums[1] + timeArr[0];
timeList.add(timeArr);
}
timeList.sort((a, b) -> {
if (a[0] == b[0]) {
// 演出开始时间相等时,结束时间小的在前
return a[1] - b[1];
}
// 演出开始时间小的在前
return a[0] - b[0];
});
// 能观看的演出数
int sum = 1;
// 第一个演出的结束时间
int end = timeList.get(0)[1];
// 从第二个演出开始遍历
for (int i = 1; i < timeList.size(); i++) {
// 当前演出的开始时间
int begin = timeList.get(i)[0];
// 当前演出的结束时间
int right = timeList.get(i)[1];
if (begin - end >= 15) {
// 当前演出的开始时间与上场演出的结束时间相差大于等于15
// 场次+1
sum++;
// 更新结束时间
end = right;
} else {
// 下一场演出无法观看时,取上一场的结束时间为end
end = Math.min(end, right);
}
}
System.out.println(sum);
}
六、效果展示
1、输入
8
10 20
10 30
40 20
45 20
45 30
75 10
80 10
80 20
2、输出
3
3、说明
输入的时候,为了方便,我就“按照开始时间排序,如果开始时间相同,再安装结束时间排序。”来输入。
- 第一场开始时间10,结束时间30;
- 按照下一场的开始时间 - 上一场的结束时间 大于等于 15的说法,下一场45 20的可看;
- 结束时间变为65,再加15,下一场开始时间大于等于80的场次可看,故80 10可看;
- 因此,可以看三场演出;
🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。